개발/Git

GitHub Actions Workflow yml 파일 구성요소

선우. 2024. 4. 17. 18:48

개요

 GitHub Actions으로 CI/CD 파이프라인을 구축하며 ”워크플로우 파일을 작성하기 전 미리 알았더라면 좋았겠다“ 라고 생각한 핵심 구성 요소들을 정리해 보았다. Workflow 구성 요소들을 학습하고 나면 yml 파일 흐름이 눈에 들어올 것이다!
 

GitHub Actions

What

 우선, CI/CD란 무엇일까? 한국어로 번역하면 지속적 통합, 지속적 배포다. 코드 수정사항을 운영 환경에 통합해 배포하는 것을 의미한다.
 
 깃헙 액션은 CI/CD 파이프라인을 구축할 때 사용할 수 있는 플랫폼 중 하나다. GitHub Actions 외에도 Jenkins, Travis CI, Google Cloud Build 등을 활용할 수 있다.
 

Why

 CI/CD 툴을 활용해 자동 통합, 배포를 하는 것을 알았다. 그런데 왜 사용하는 것일까?
 
 코드 수정사항이 추가될 때마다 애플리케이션을 수동으로 빌드하고, 서버 컴퓨터에 접속해서 배포한다면 매우 번거로울 것이다. 이런 과정을 자동화해서 개발자는 수고를 덜고 기능 개발에 집중할 수 있다.
 

Workflow 핵심 구성요소

 이제 GitHub Actions Workflow의 핵심 구성요소를 살펴보자. Workflow, Event, Runner, Job, Step, Action 6가지를 소개한다.

https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions

 

Workflow

  • Workflow는 하나 이상의 Job을 실행하는 자동화된 프로세스다. YAML 파일로 정의할 수 있다.
  • workflow 파일은 .github/workflows 디렉토리에 저장해야 한다. 하나의 Repository는 여러 개의 workflow 파일을 가질 수 있다.
  • Event가 발생할 때 실행시키거나, 스케줄링을 통해 실행시킬 수 있다.

 

Event

  • Event는 Repository에 저장된 특정 workflow를 실행시키는 활동들을 의미한다. Trigger라고도 부른다.
  • Pull Request를 올리거나, Issue를 발행하거나, Commit을 push하거나.
  • Workflow를 실행시킬 수 있는 모든 Event 목록은 🔗여기에서 찾아볼 수 있다.

 

Runner

  • Workflow에 정의된 Job을 실행하는 GitHub의 컴퓨터다. 우분투 리눅스, 윈도우, 맥 OS를 지원한다.
  • 하나의 Runner는 동일한 시간에 하나의 Job만을 실행할 수 있다. 하나의 Job이 끝나면 동일한 Runner에 대해 다른 Job을 실행시킬 수 있다.

 

Job

  • Job은 Step을 여러 개 묶은 조합이다.
  • 각 Job은 기본적으로 다른 Job과는 독립적으로 실행된다. 즉, 동일한 시간에 서로 다른 Runner 컴퓨터에서 병렬로 실행된다는 의미이다.
  • 물론 특정 Job이 성공적으로 완료된 뒤, 다음 Job이 실행되도록 dependency를 설정할 수 있다.
    • 예를 들어, 여러 개의 모듈을 각각 Build 한 뒤 하나의 Package로 묶는 작업을 수행한다고 가정하자.
    • Build Job들이 성공적으로 완료될 때까지 기다린 뒤 Packaging Job을 실행할 수 있다.

 

Step

  • Step에는 특정 shell script 또는 특정 action이 할당된다.
  • 각 스텝들은 하나의 Runner에서 순차적으로 실행되기 때문에 서로에게 의존적이다.
  • 또한 서로 데이터를 공유할 수 있다.
    • 예를 들어, Test step에서 애플리케이션을 테스트 한 뒤 Build step에서 해당 애플리케이션을 빌드할 수 있다.

 

Action

  • GitHub은 자주 사용되거나 복잡한 작업을 개발자들이 재사용할 수 있도록 action이라는 custom application을 제공한다.
  • 예를 들어, 빌드한 애플리케이션을 이미지로 만들어 도커 허브에 push 하는 작업을 추가하고 싶다면, 다른 개발자가 만들어 둔 action을 Market Place에서 가져다 사용하면 된다.

 

Reference