Github Actions 란?

wschoi·2023년 10월 24일
1
post-thumbnail

Github Actions란?

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

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

Example1) Black formatter

  • develop 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을 실행시키는 configurable automated process

2) on push

- name: black formatter

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

3) branches

name: black formatter # github action 이름

on:
  push:
    branches:
      - '*'
  • “어떤 branch”에 commit이 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
  • 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 확인
profile
개발블로그입니다

0개의 댓글