CI(지속적 통합)와 CD(지속적 전달)는 작업한 코드를 레파지토리에 저장하고 빌드하고 배포하는 과정을 자동화하는 것을 말한다.

GitHub Action 의 개념


Workflow

자동화된 전체 프로세스를 말한다. 하나 이상의 Job 으로 구성되고 Event 에 의해 예약되거나 트리거될 수 있는 자동화된 절차를 말한다. 보통 YAML 파일로 작성되고 GitHub 레파지토리의 루트에서 ./github/workflows 폴더 아래에 저장된다. GitHub 에 YAML 파일로 정의한 자동화 동작을 올리면 GItHub Action 에서 해당 파일을 기반으로 실행된다.

Event

Wolkflow 를 실행하는 특정 활동이나 규칙을 말한다. (ex. commit, push, pull request ...)

Job

Job 은 여러 Step 으로 구성되고 단일 가상환경에서 실행된다. 다른 Job에 의존관계를 지닐 수도 있고 병렬적으로도 실행될 수도 있다.

Step

Job 안에서 순차적으로 실행되는 프로세스 단위. step에서 명령을 내리거나, action을 실행할 수 있다.

Action

job을 구성하기 위한 step들의 조합으로 이루어진 독립적인 명령을 말한다. workflow의 가장 작은 빌드 단위이다. workflow에서 action을 사용하기 위해서는 action이 step을 포함해야 한다. action을 구성하기 위해서 레포지토리와 상호작용하는 커스텀 코드를 만들 수도 있다. 사용자가 직접 커스터마이징하거나, 마켓플레이스에 있는 action을 가져다 사용할 수도 있다.

Runner

GitHub Action Runner 어플리케이션이 설치된 머신으로 workflow 가 실행될 인스턴스를 말한다.

YAML 파일 둘러보기


name: GitHub-Action-Test # GitHub Action에 노출되는 workflow의 이름
on: 
		# 이 파일을 실행시키는 트리거하는 이벤트를 작성한다.
    push: # push 될때.
      branches: [ master, dev ] # 특정 브랜치를 지정할 수 있다
    pull_request: # pull request 가 올라갈 때.
      branches: [ master ]
jobs:
  build:
    strategy: # 여러 환경에서의 테스트/배포를 위해 빌드 matrix를 구성한다.
      matrix:
        node-version: [10.x, 12.x]

    runs-on: ubuntu-latest # 어떤 OS 에서 실행할 것인지를 명시한다.
    steps: 
			# job이 가질 수 있는 동작의 리스트. 각각의 step 은 독립적인 프로세스를 가진다.
      - name: Checkout source code # step 의 이름
        uses: actions/checkout@v2 # 해당 step 에 사용할 action
        
      - name: My First Step
        run: # job에 할당된 컴퓨팅 자원의 shell을 이용하여 입력할 커맨드라인
          npm install
          npm test
          npm build

      - name: Cache yarn dependencies
        uses: actions/cache@v1
        id: yarn-cache
        with:
					# 해당 action에 의해 정의되는 input 파라미터. key:value 구성
          path: node_modules
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-