반응형

Github Actions란?

Github에서 제공하는 CI/CD 등을 위한 서비스로 자동으로 코드 저장소에서 어떤 Event가 발생했을 때 작업(Workflow)이 일어나게 하거나 주기적으로 반복해서 실행시킬 수 있도록 도와주는 서비스

다양한 예시

  • 레포지토리에 코드가 푸쉬되었을 때 자동으로 Test Code 검사
  • 깃헙 레포에서 다양한 사람들과 협업할 때 coding convention (ex) code formatting)을 잘 맞췄는지 체크
  • Pull request가 merge되었을 때 docker image를 빌드하고 자동으로 Amazon Elastic Container Registry(ECR) 에 올리기

본 글에서는 Github actions를 통해 repository에 pushpull_request가 발생할 때마다 Python 코드의 formatting을 체크하는 black을 실행시켜 주기적으로 검사하는 작업을 위한 yaml 파일을 설명

예시를 통해서 Github Actions가 어떻게 작동하는지 알아봄

Black formatter yml파일 예시

Github actions는 yaml파일을 통해 서비스를 실행시킬 수 있다

main branch (default branch)에 .github/workflows 폴더 추가 후 아래 내용을 yaml 파일에 추가 (ex) black.yml)

name: black formatter # github action 이름

on:
  push: # 모든 branch에 commit이 push 될때 아래 workflow(jobs) 실행
    branches:
      - '*'
  pull_request:# 모든 branch에 pull_request 요청이 왔을 때 workflow(jobs) 실행
    branches:
      - '*'

jobs:
  Black_code_formatter:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: psf/black@stable
        with:
          options: "-l 79 --diff --check"
          src: "./"

위의 yaml 파일 내용 설명

1) name

- name: black formatter
  • Github actions에서 workflow의 이름
    • workflow: 하나 이상의 job을 실행시키는 자동화된 process. 여러개의 job을 묶은거라 생각하면 되고 job은 아래에 다시 설명

왼쪽 빨간 박스처럼 이름이 표시됨

 

2) on push

- name: black formatter

- on:
    push: # commit을 push 했을 때 github action이 돌게한다

  • ‘어떤 event가 발생했을 때’ 에 해당
  • 가능한 event 종류들
    • push, pull_request, create 등등 (링크)

3) branches

name: black formatter # github action 이름

on:
  push:
    branches:
      - '*'
  • “어떤 branch”에 코드가 push 된 경우에 workflow를 실행할지 결정
  • 위의 예는 모든 branch( * 로 표시)에 push되는 경우이고, 아래처럼 특정 branch에 push될 때를 지정할 수 있음
on:
  push:
    branches:
      - 'develop'

4) on pull_request branches

name: black formatter # github action 이름

on:
  push:
    branches:
      - '*'
  pull_request:
    branches:
      - '*'
  • 위는 모든 branch에 pull_request가 열렸을 때 workflow를 실행한다는 의미
  • 참고
    • 각 event (ex) pull_request) 마다 types(ex) opened review_requested, closed) 이 있음
    • 아래와 같이 types를 지정해줄 수 있음 (pull_request는 default type이 opened)
    on:
      pull_request:
        types: [opened, reopned]
    
    

5) jobs & each job name

  • workflow는 하나 이상의 job 들로 구성되는데 jobs에 대해 설정

기본형태

jobs:
  <job_id_1>: # job1의 이름 (github UI에 표시됨)

  <job_id_2>: # job2의 이름
name: black formatter # github action 이름

on:
  push:
    branches:
      - '*'
  pull_request:
    branches:
      - '*'

jobs:
  Black_code_formatter:

6) runs-on

  • 어떤 형태의 os 에서 job이 실행될지를 정의 (기본적으로 github이 제공하는 virtual machine)
    • window, ubuntu, macOS
name: black formatter # github action 이름

on:
  push:
    branches:
      - '*'
  pull_request:
    branches:
      - '*'

jobs:
  Black_code_formatter:
    runs-on: ubuntu-latest
  • github이 제공하는 ubuntu-lateast 를 image로 사용

7) steps

  • 각각의 job은 steps 라고 하는 연속된 task들로 구성됨
  • command를 실행할 수 있고, setup task 도 실행할 수 있음
  • 예시
steps:
  run: echo 'Hello'
name: black formatter

on:
  push: #
    branches:
      - '*'
  pull_request:
    branches:
      - '*'

jobs:
  Black_code_formatter:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: psf/black@stable
        with:
          options: "-l 79 --diff --check"
          src: "./"

8) uses

  • job에서 steps의 일부로서 action을 선택하는 명령어
  • 아래 예는 public action을 사용
name: black formatter

on:
  push:
    branches:
      - '*'
  pull_request:
    branches:
      - '*'

jobs:
  Black_code_formatter:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: psf/black@stable
        with:
          options: "-l 79 --diff --check"
          src: "./"

public action을 사용하는 예

9) with

  • uses 키워드 옆의 각각의 action들에 대해 정의된 input parameter map 을 아래에 입력하게하는 키워드
name: black formatter

on:
  push: 
    branches:
      - '*'
  pull_request:
    branches:
      - '*'

jobs:
  Black_code_formatter:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: psf/black@stable
        with:
          options: "-l 79 --diff --check"
          src: "./"

  • black formatter는 options 키워드와 src 키워드를 이용해 argument를 넘겨줄 수 있음 (링크)

options

  • -l 79 : 한줄에 혀용되는 character 수로 79자로 설정 (default 88)
  • --diff : 파일을 수정하진 않고 수정되어야 할 부분을 로그로 알려주고 수정될 형태를 제안
  • --check : 파일을 수정하진 않고 status code를 반환
    • status code 0: formatting 되어야 할 부분 없음
    • status code 1: formatting 되어야 할 부분 있음
    • status code 123: code error (internal error)

src

  • “./” : 전체 코드에 대해서 formatting 확인

위의 yaml 파일을 repo에 추가하면 아래와 같이 Workflow가 생성되어 작동되는걸 확인할 수 있음

 

초록색 체크표시는 성공적으로 완료된 상태

해당 워크플로우를 눌러보면 우리가 위에서 작성했던 Job의 이름이 표시되고 job을 누르면 구체적으로 어떤 step들이 실행되었는지 표시된다

반응형

+ Recent posts