Infra

[CI/CD] Github Actions란? (개념/ 용어 정리)

JeongKyun 2022. 11. 14.
반응형

서론


이번 포스팅에선 최근 CI/CD로 많이 사용되는 github actions의 기본적인 개념과 주요 용어들에 대해 간략히 정리해보려한다. 필자도 미숙한 부분이기에 공식 홈페이지 내용 과 다른 포스팅의 검색을 통해 더 알아보는것을 추천한다.

 


 

Github Actions란?


workflow를 자동화 할 수 있도록 도와주는 도구를 말한다.

 

 

특징

  • repo에서 어떤 event가 발생했을 때 특정 작업을 실행시키거나, 주기적으로 어떤 작업들을 반복해서 실행시킬 수 있다.
    • pull request 검사
      • 누군가 repo에 pr을 생성하게 되면 github actions를 통해 해당 코드 변경분에 문제가 없는지 각종 검사를 진행한다.
    • 빌드 및 배포
      • 어떤 새로운 코드가 메인 브랜치에 유입(push)되면 github actions를 통해 소프트웨어 빌드를 하고 상용 서버에 배포할 수 있다.
    • 정해둔 시각 데이터 수집
      • 뿐만 아니라 정해둔 특정 시각에 그날 하루에 대한 통계 데이터를 수집시킬 수도 있다.

 

 

기능

  • Workflow(작업 흐름)
    • 자동화 해놓은 작업 과정이라 볼 수 있다.
    • repo내에서 .github/workflows 폴더 아래에 위치한 yaml 파일로 설정하며 하나의 코드 저장소에는 여러 개의 워크플로우, 즉 여러개의 yaml 파일을 생성할 수 있다.
    • 이 workflow yaml 파일에는 크게 2가지를 정의하는데, 첫번째는 on 속성을 통해 해당 workflow가 언제 실행되는지를 정의한다.
      • ex) repo의 main 브랜치에 push이벤트가 발생할 때마다 workflow를 실행하려면 다음과 같이 설정해준다.
      on:
        push:
          branches:
            - main
      
      • 또 다른예로, 매일 자정 워크플로우를 실행하려면 다음과 같이 설정한다.
      on:
        schedule:
        - cron: "0 0 * * *"
      
  • Events
    • workflow를 trigger하는 특정 활동이나 규칙을 의미한다.
    • 아래 예시를 말한다.
      • 특정 브랜치로 push
      • 특정 브랜치로 pr
      • 특정 시간대에 반복(cron)
  • Jobs
    • 독립된 가상머신 또는 컨테이너에서 돌아가는 하나의 처리 단위를 의미한다.
    • 하나의 워크플로우는 여러 개의 작업으로 구성되며 적어도 하나의 작업은 있어야한다.
    • 그리고 모든 작업은 기본적으로 동시에 실행되며, 필요 시 작업간에 의존 관계를 설정하여 작업이 실행되는 순서를 제어할 수도 있다.
      • jobs 의존 관계를 설정 할때는 needs를 사용하여 설정한다.
      jobs:
          job1:
          job2:
            needs: job1
          job3:
            needs: [job1, job2]
      
    • yaml 파일 내에서 jobs 속성을 사용하여 작업 식별자(key id)와 작업 세부 내용 간의 매핑 형태로 명시가 된다.
      • ex) job1, job2, job3이라는 작업 id를 가진 3개의 작업을 추가하려면 다음과 같이 설정한다.
      jobs:
        job1:
          # job1에 대한 세부 내용
        job2:
          # job2에 대한 세부 내용
        job3:
          # job3에 대한 세부 내용
      
      위 처럼 명시하면 되며, 필수로 runs-on 속성을 통해 해당 리눅스나 윈도우즈와 같은 실행 환경을 지정해줘야한다.
      • ex) 우분투의 최신 실행환경에서 해당 작업을 실행한다면, 다음과 같이 설정한다.
      jobs:
        job1:
          runs-on: ubuntu-latest
          steps:
            # ...(생략)...
      
      또 중요한 부분이 작업 순서를 정해줘야하는데, 이 부분은 steps 속성을 통해서 설정하면 된다.
  • Steps
    • 작업 단계를 의미한다.
    • 작업 단계는 단순한 커맨드 또는 스크립트가 될 수도 있고 actio과 같이 좀 복잡한 명령일 수 있다.
    • 커맨드를 실행할 때는 run 속성을 사용하고, 액션을 사용할 때는 uses 속성을 사용한다.
      • ex) js 프로젝트를 내려받고, 패키지를 설치한 후, 테스트 스크립트를 실행한다.
      jobs:
        test:
          runs-on: ubuntu-latest
          steps:
            - uses: actions/checkout@v3
            - run: npm install
            - run: npm test
      
  • Actions
    • 빈번하게 필요한 반복 단계를 재사용하기 용이하도록 제공되는 일종의 작업 공유 메커니즘을 말한다.
    • action은 하나의 코드 저장소 범위내에서 여러 워크플로우 간에 공유를 할 수 있을 뿐만 아니라. 공개 코드 저장소를 통해 액션을 공유하면 github 상의 모든 코드 저장소에서 사용이 가능해진다.

 


 

마무리


해당 포스팅은 필자가 공부하며 정리한 내용들을 적은것뿐이기에 github actions의 많은 개념중 일부중 하나입니다. 서론에서 말씀드렸듯이 더 많은 문서를 찾아보며 개념을 잡아가기를 추천드립니다.

댓글

💲 많이 본 글