GitHub Action
GitHub Action은 GitHub에서 제공하는
CI
: 지속적 통합
CD
: 지속적 배포
를 위한 서비스 입니다.
Repository
에서 어떤 Event
가 발생하면 그에 따른 작업수행, 반복이 가능해집니다.
예를 들어 특정 branch
이름으로 Repository
에 push
를 하면 테스트코드를 실행하고 성공하면 정해진 Template
으로 PullRequest
를 생성하고 실패하면
작업을 취소하는 등의 편리한 작업이 가능해지는 겁니다.
많이 사용하는 Jenkins
등의 도구도 있지만 GitHubAction
은 진입장벽이 낮은 장점이 있어 DevOps
가아닌 개발자도 CI/CD
를 설정을 보다 쉽게 접근할 수 있게 되었습니다.
Workflows (GitHub Action에서 가장 상위 개념)
.github/workflows
경로 하위에 yaml
로 설정이 가능합니다.
yaml
에는 크게 2가지를 정의해야 합니다.on
: workflow의 실행시점
입니다.jobs
: workflow의 작업내용
입니다.name: learn-github-actions // Repository Actions탭에 표시될 이름
run-name: ${{ github.actor }} is learning GitHub Actions // Workflows의 이름
on: [push] // Workflows의 트리거
jobs: // learn-github-actions의 작업 그룹
check-bats-version: // job(작업)
runs-on: ubuntu-latest // 우분투 최신 버전에서 실행
steps: // job의 단계 그룹
- uses: actions/checkout@v3 // 워크플로가 실행될 떄마다 체크아웃 실행
- uses: actions/setup-node@v3 // node14버전 설치
with:
node-version: '14'
- run: npm install -g bats // 명령 실행
- run: bats -v // 명령 실행
jobs:
example-job:
runs-on: ubuntu-latest
steps:
- name: Retrieve secret
env:
super_secret: ${{ secrets.SUPERSECRET }}
run: |
example-command "$super_secret"
WorkFlows
의 모든 작업은 병렬
실행 입니다.needs
를 이용해 종속을 만들 수 있습니다. 작업 중 하나가 실패하면 종속된 작업은 실행되지 않습니다.if
문을 통해 정의가 가능합니다.jobs:
setup:
runs-on: ubuntu-latest
steps:
- run: ./setup_server.sh
build:
needs: setup
runs-on: ubuntu-latest
steps:
- run: ./build_server.sh
test:
needs: build
runs-on: ubuntu-latest
steps:
- run: ./test_server.sh
strategy
,matrix
를 이용해 여러 버전, 언어, 운영체제에서 코드를 테스트 할 수 있습니다.jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node: [12, 14, 16]
steps:
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
Repository
의 모든 워크플로에서 사용이 가능합니다.jobs:
example-job:
steps:
- name: Cache node modules
uses: actions/cache@v3
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
services
를 사용해 서비스를 호스팅하는 임시 컨테이너 생성이 가능합니다.jobs:
container-job:
runs-on: ubuntu-latest
container: node:10.18-jessie
services:
postgres:
image: postgres
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Install dependencies
run: npm ci
- name: Connect to PostgreSQL
run: node client.js
env:
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
jobs:
example-job:
runs-on: [self-hosted, linux, x64, gpu]
워크플로 재사용
다른 WorkFlows
내에서 WorkFlows
를 호출할 수 있습니다.
환경 사용
WorkFlows
의 작업실행을 제어하기 위해서 보호, 비밀환경을 구성할 수 있습니다.