본문 바로가기

기술/개발 도구

Git) GitHub Actions 사용법

CI/CD 란?

  • CI (Continuous Integration) : 지속적 통합
  • CD (Continuous Delivery/Deployment)  : 지속적 배포 

협업을 통해 애플리케이션을 개발할 때, 새로운 코드 변경 사항을 정기적으로 빌드 및 테스트 하여 퍼블릭 레포지토리에 통합되어야 함께 개발하는 개발자들이 동시에 애플리케이션 개발과 관련된 코드 작업을 할 때 발생할 수 있는 충돌 문제를 해결할 수 있다. 

또한 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 자동으로 깃 레포지토리에 업로드 되도록하여 해당 레포지토리에서 애플리케이션을 실시간으로 프로덕션 환경으로 배포할 수 있게 하여 지속적 서비스 제공이 가능하게 한다. 즉, CD를 통해 지속적 제공 및 배포 과정을 자동화여 최소한의 노력으로 새로운 코드를 사용자에게 전달하는 것이 목표이다. 

 

GitHub Actions 공식 문서

 

GitHub Actions Documentation - GitHub Docs

Automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you'd like, including CI/CD, and combine actions in a completely customized wo

docs.github.com

 

 

GitHub Actions 기본 개념

  • 워크플로우
    • 자동화된 하나의 전체 프로세스를 의미함
    • 하나 이상의 job으로 구성됨
    • YAML 파일로 작성됨
    • git 레포지토리의 .github/workflows 폴더 아래에 저장됨 
  • 이벤트
    • 워크플로우를 실행하게 되는 특정 활동 및 규칙
    • ex) push, pull request 등 
    • 여러 스텝으로 구성됨
    • 단일 가상 환경에서 실행됨
  • 스텝
    • 잡 안에서 순차적으로 실행되는 프로세스 단위 
  • 액션
    • 잡을 구성하기 위한 스탭들의 조합으로 구성된 독립적인 명령
    • 워크 플로우의 가장 작은 빌드 단위 
    • 액션이 스탭을 포함해야 함 
    • 사용자가 직접 커스터마이징 또는 마켓플레이스에 있는 것 사용 
  • 러너 
    • 워크플로우가 실행된 인스턴스

9008ㅜ8852ㅜ 1552

간단한 문법

  • name : 워크플로우의 이름 (파일 마다 하나씩 설정 가능) 
  • on (필수값) : 워크플로우아 어떤 이벤트에 대해서 실행될지 지정
    • example push했을 때 마스터 브랜치에 대한 설정이라는 것을 의미 
    • on: push: branches: [ master ] pull_request: branches: [ master ]​
  • jobs : 워크플로우에서 수행할 여러 개의 잡을 설정할 수 있음 
  • runs-on : 잡 실행할 운영체제 지정 (직접 운영하는 경우에는 self-hosted 로 지정)
  • strategy : 여러 버전의 환경에서 실행하고 싶을 경우, 행렬로 값을 줌 
    • example
      strategy:
        matrix:
          node-version: [10.x, 12.x, 14.x]​
  • steps : jobs.<job_id>.steps에서 잡의 실제 동작을 정의 
    • uses : 각 스텝에서 사용할 액션 지정 -> 마켓플레이스에서 이미 만들어진 액션을 가져다 설정만 해서 사용할 수 있음 
    • example
      steps:
        - uses: actions/checkout@v2
        - name: Use Node.js ${{ matrix.node-version }}
          uses: actions/setup-node@v1
          with:
            node-version: ${{ matrix.node-version }}
        - run: npm ci
        - run: npm run build --if-present
        - run: npm test​
    • run : shell에 명령어를 실행하는 부분 

References