Image
CI\CD/GitHub Actions

GitHub Actions의 세가지 구성요소 : Workflows, Jobs, Steps

GitHub Action의 세가지 구성요소

GitHub Actions는 Workflow, Job, Step 세가지 구성요소로 이루어진다. Step은 Job에 포함되고, Job은 Workflow에 포함된다. 즉, Workflow가 가장 큰 작업 단위이고, 그 아래 Job이 있고, Job 아래에는 Step이 있다. 이를 그림으로 나타내면 아래와 같다.

 

 

이 세가지를 잘 활용하면, 많은 작업들을 자동화 할 수 있다. 이제 이들 각각이 무엇인지 알아보자.

 

Workflows

Workflow는 GitHub Repository에 들어가는 작업 단위이다. 보통 Repository의 /.github/workflows/ 경로에 존재하며, 확장자는  .yml 이다.  

 

 

예를 들어 위의 그림에서는 first_action.yml이라는 Workflow 파일이 있다. 하지만 여기서 파일 이름인 first_aciton이 Workflow의 이름은 아니다. Workflow 파일 내부에는 name: [Workflow 이름] 이 있는데 여기서 Workflow의 이름을 설정한다.

 

# WorkFlow의 이름 설정
name: First workflow

 

Workflow는 어떤 이벤트에 따라 Workflow를 실행시킬지를 on: 키워드를 사용해 설정할 수 있다. 예를 들어 아래에서는 main 브랜치에 푸시가 일어나거나 pull request가 일어날 경우 Workflow가 실행된다.

# Workflow가 Trigger되는 이벤트 설정
on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

 

또한 Workflow는 여러 job을 포함한다. 예를 들어 테스트 후 빌드를 돌리는 job을 아래와 같이 설정할 수 있다.

# job을 설정
jobs:
  # test job
  test:
  # build job
  build:

 

Jobs

Job은 병렬적으로 수행되거나 순차적으로 수행되어야 하는 작업의 단위이다. 기본 값은 병렬로 수행되는 것이다. 실행이 되기 위해서는 작업 환경의 정의가 필요한데, 이를 Runner라 부른다. Runner는 아래와 같이 runs-on: 을 통해 설정이 가능하다. 아래에서는 ubuntu-latest로 설정되어 있는데 이 키워드는 GitHub Action에서 제공하는 다양한 ubuntu runner 중 가장 최신 Runner이다.

 

jobs: 
  first-job:
    #runs-on: job이 돌아갈 실행환경 설정 
    runs-on: ubuntu-latest

 

Job은 하나 혹은 그 이상의 Step을 포함한다.

 

 

Steps

Step은 Job이 포함되며, shell script나 Action을 실행한다. shell script는 terminal에서 수행하는 명령어의 집합이고, Action은 GitHub Action에서 미리 정의한 script이다. 커스텀 Action이나, 서드파티에서 제공하는 Action을 수행하는 것도 가능하다. 예를 들어 actions/checkout@v3 는 GitHub Actions에서 미리 정의한 Action으로 아래와 같이 포함될 수 있다.

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
    - name: Checkout
      uses: actions/checkout@v3

 

Step은 무조건 순차적으로 수행되며, 특정 조건을 충족할 때만 수행하도록 할 수도 있다.

반응형

 

이 글의 저작권은 '조세영의 Kotlin World' 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.

 

 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com