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의 작업실행을 제어하기 위해서 보호, 비밀환경을 구성할 수 있습니다.