GitHub Actions 로 시작하는 CI/CD

5748 단어 CI/CDCI/CD

CI/CD 란

새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제 (integration hell) 를 해결하기 위한 솔루션으로, 앱 개발 단계를 자동화하여 앱을 보다 짧은 주기로 사용자에게 제공하는 방법입니다. 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공합니다.

CI (Continuous Integration) 란 테스트, 빌드 자동화를 말합니다. 다수의 개발자가 동시에, 긴 텀으로 관련 작업을 할 경우 통합과 충돌 해결은 더 어려워지고 버그 발생 위험은 더 커집니다. CI 는 이를 위한 해결법으로, 새로운 코드 변경 사항이 짧은 텀으로 빌드, 테스트 되어 병합될 수 있도록 합니다.

CD (Continuous Delivery(Deployment)) 란 배포 자동화를 말합니다. 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 합니다.

더 알아보기
redhat: CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정
fullstackopen: Introduction to CI/CD


GitHub Actions 란

GitHub Acitons 는 소프트웨어의 워크플로우를 쉽게 자동화할 수 있는 CI/CD 툴입니다. 이벤트 기반으로 작동하며, 명시된 이벤트 가 발생할 때마다 지정된 일련의 명령들을 자동으로 실행할 수 있습니다.

특정 브랜치에 변경 사항이 push 될 때마다 자동으로 프로젝트를 빌드 후 배포하도록 하는 예를 들어보겠습니다. push 라는 이벤트 (event) 가 발생할 때 마다 워크플로우 (workflow) 가 자동으로 트리거 되고, 워크플로우 내부에 명시된 작업 (job)단계 (step) 별로 해당하는 액션 (action) 들이 실행됩니다.

Github Actions 의 사용량에 따라 요금에 부과될 수 있습니다. Total concurrent jobs 20개 까지 Free plan 으로 부담갖지 않고 충분히 사용해 볼 수 있습니다. (참고: Usage limits, billing, and administration)


GitHub Actions 용어 정리

참고: Introduction to GitHub Actions

Workflows

레포지토리에 추가할 수 있는 자동화된 절차가 workflow 입니다. workflow 는 하나 이상의 job 으로 구성되며 event 에 의해 scheduled 나 트리거 될 수 있습니다. 프로젝트를 build, test, package, release, deploy 하는데 사용할 수 있습니다.

Events

코드 변경 사항 push , issue 또는 pull reqeust 생성과 같은 event 발생 시 workflow 를 트리거합니다. Events that trigger workflows 에서 전체 event 목록을 확인해 볼 수 있습니다.

Jobs

동일한 runner 에서 실행되는 step 들의 집합입니다. 기본적으로 workflow 는 여러 job 을 병렬로 실행합니다.

job 간에 종속성을 부여해 job 들이 순차적으로 실행되도록 workflow 를 구성할 수도 있습니다. 예를 들어, 빌드 job 이 성공적으로 완료되면 테스트 job 을 수행하도록 구성할 수 있습니다. 이 경우 빌드 job 이 실패하면 테스트 job 은 실행되지 않습니다.

Steps

step 은 commands 를 실행할 수 있는 개별 task 입니다. 동일한 jobstep 들은 동일한 runner 에서 실행되므로 action 간에 데이터를 공유할 수 있습니다.

Actions

actionjob 생성 시 step 으로 결합되는 독립적인 command 로 workflow 에서 가장 작은 building block 단위입니다. 사용자 action 을 만들거나 GitHub 커뮤니티에서 만든 action 을 사용할 수 있습니다. workflow 내에서 action 를 사용하고자 한다면 반드시 step 내에 포함하여야합니다.

Runners

runner 는 GitHub Actions runner 앱이 설치된 서버입니다. GitHub에서 호스팅하는 runner 를 사용하거나 직접 호스팅할 수 있습니다.


Workflow 작성해보기

Github Actions 는 YAML 로 작성합니다. 해당 파일은 저장소 내 .github/workflow 경로에 저장합니다.

YAML 은 XML, JSON 처럼 소프트웨어 간 데이터 전달 목적으로 약속된 포맷, 양식입니다. XML, JSON 에 비해 사람이 더 읽기 쉽게 만들어져있습니다. 설정 파일로 많이 사용됩니다.

workflow syntax 는 Workflow syntax for GitHub Actions 문서를 참고합니다.

특정 브랜치에 푸시가 되면 자동으로 프로젝트를 build 해 S3 bucket 에 deploy 하는 예제 (CICD.yaml) 를 작성해보았습니다.

name: CICD

on:
    push:
        branches:
            - main
            # ...
        paths-ignore:
            - "README.md"

jobs:
    integration:
        # ...
        
    deploy:
        if: github.event_name == 'push'
        name: deploy
        runs-on: ubuntu-latest
        needs: integration

        steps:
            - uses: actions/checkout@v2

            - name: Configure AWS credentials
              uses: aws-actions/configure-aws-credentials@v1
              # ...

            - name: Install dependencies
              run: yarn install

            - name: Run build
              run: yarn build

            - name: Create bucket
              # ...
              
            - name: Allow public read
              # ...
            
            # ...

YAML 이 indent 기반이므로 예상치못한 indent 로 action 이 실패할 수 있어 주의해야합니다. 🥲

Context and expression syntax for GitHub Actions 를 참고하여 더 세밀한 workflow 를 작성해볼 수 있습니다.

좋은 웹페이지 즐겨찾기