Github Action
Github에서 공식적으로 제공하는 CI / CD 플랫폼
=> 개발의 workflow를 자동화 시키는 파이프 라인을 만들 수 있음
Github에서 관리중인 코드에 사용 가능하기 때문에 다른 CI / CD 서비스 대비 진입장벽이 낮음
=> 기존 CI / CD 서비스 대비 간편한 설정과 높은 접근성
Github Action의 구성요소

workflow
자동화 해 놓은 작업 과정
하나의 코드 저장소에는 여러개의 워크플로우 파일을 생성 가능
해당 워크플로우(YAML 파일)에는 2가지가 정의되어야 함
- on 속성을 통해 해당 워크플로우가 언제 실행되는지 정의
- jobs 속성을 통해 해당 워크플로우가 구체적으로 어떤 일을 해야하는지 명시
name: learn-github-actions // workflow의 이름, 옵셔널한 값
on:
push:
branches: [ master, dev ]
jobs:
...
on 속성을 통해 레포지토리에 변경사항을 push 하는 시점마다 실행되도록 설정
event
Workflow를 실행하는 특정 활동이나 규칙
=> github에 소스코드를 push 하면 발생하는 push event, pull request event 등 대부분의 작업을 event로 정의 가능
ex ) 누군가 커밋을 레포지토리에 push하거나 pull 요청이 생성되면 Github에서 활동이 시작될 수 있다
job
독립된 가상 머신 또는 컨테이너에서 돌아가는 하나의 처리 단위
하나의 워크플로우는 여러개의 작업으로 구성될 수 있음 => 적어도 하나의 작업은 존재해야 함
다른 job에 의존 관계를 통해 작업 실행 순서를 제어할수도, 각각 병렬로 실행될 수도 있음
- runs-on : 해당 job을 어떤 OS에서 실행할 것인지 명시
- steps : job이 가질 수 있는 동작의 나열
- env : 해당 job에서 사용할 환경 변수를 key/value의 형태로 설정
- strategy : 여러 환경에서의 테스트/배포를 위해서 빌드 matrix를 구성
jobs:
build:
strategy:
matrix:
node-version: [10.x, 12.x]
runs-on: ubuntu-latest
steps:
...
step
각 작업 안에서 순차적으로 실행되는 프로세스 단위
step은 단순히 명령을 내리거나 action 실행 가능
=> 커멘드나 스크립트를 실행할 때는 run 속성을, 액션을 사용할 때는 uses 속성을 사용
- uses : 해당 step에서 사용할 액션, {owner}/{repo}@{ref|version} 의 형태를 지님
- run : job에 할당된 컴퓨팅 자원의 shell을 이용하여 커맨드 라인을 실행
steps:
- name: My First Step
run:
npm install
npm test
npm build
- name: Cache yarn dependencies
uses: actions/cache@v1
...
action
복잡하고 자주 반복되는 작업을 정의한 커스텀 application
하나의 코드 저장소 범위 내에서 여러 워크플로우 간의 공유를 할 수 있음
+ 공개 코드 저장소를 통해 액션을 공유하면 Github 상의 모든 코드 저장소에서 사용 가능
=> 깃허브 마켓플레이스를 통해 공용 Action 또는 다른 사람들이 만든 Action 사용 가능
- with : 해당 action에 의해 정의되는 input 파라미터
...
- name: Cache yarn dependencies
uses: actions/cache@v1
id: yarn-cache
with:
path: node_modules
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
runner
작업이 실행되는 가상머신 또는 자체 호스팅 환경
workflow가 실행될 인스턴스
Quick Start
간단하게 Github Action을 구성해 볼 수 있음
1. 원하는 레포지토리에 .github/workflow 디렉토리를 찾아서 github-actions-demo.yml 파일 생성
=> 홈페이지에서 yml 파일 데모소스 제공
2. 새 브랜치 생성 후 pr 시작하기 -> Propose new file 클릭
3. 커밋 후 push 이벤트가 트리거되면 workflow가 실행되는데, 실행되는 job은 해당 레포의 action 탭에서 확인 가능