본문 바로가기

ML,DL/Ops

Github Actions - CI/CD

해당 포스트는 Github에서 제공하는 Actions 공식 문서를 바탕으로 제작되었습니다.
Github Actions 공식 문서

Overview

Github Actions는 Github에서 제공하는 CI/CD 기능

Component

    • Workflow
      • workflow를 적용시키고자 하는 Repository에 있는 YAML 파일을 통해서 configurate
        • 추가적으로, Workflow는 Repository의 .github/workflows 경로에 정의되어야 함
      • Workflow는 정해진 Event를 통해 실행되거나, 수동으로 실행되거나 혹은 정해진 스케쥴에 따라서 실행 가능
      • Event
        • 특정 조건이 만족되면 workflow를 실행하도록 하는 Trigger
        • Repository에 _새로운 Pull Request, Issue, Push Commit_이 생기거나, _정해진 시간에 workflow를 실행하도록 스케쥴_을 생성하거나, _POST API_를 통해 실행시키거나, 혹은 _수동_으로 실행시킬 수 있다
      • 하나의 Repository에 서로 다른 task를 수행하는 한개 이상의 workflow가 정의될 수 있음
      • Event 설정 관련 공식문서
Workflow is a configurable automated process that will run one or more jobs
  • Job
    • 하나의 _Job_은 여러 _Step_의 묶음(집합)이며, 하나의 _Job_은 하나의 _Runner_에서 실행됨
    • Step
      • 하나의 step은 shell script이거나, action
      • Step은 순서대로 실행되며, step간에 데이터를 공유할 수 있음
        • e.g. (1) 이미 build된 Application을 테스트하는 step (2) Application을 build하는 step
          • 이 두 step간의 데이터 공유가 가능하며, (1)을 실행 후, (2)를 실행하도록 할 수 있음
    • Job 간의 Dependency 설정
      • 기본적으로, Job은 병렬적으로 실행되며, 서로간의 Dependency가 존재하지 않는다
      • 하지만, Dependency를 부여해서 Job간의 실행 순서를 결정할 수도 있음
  • Action
    • 즉, 주로 많이 사용되는 task에 대해 손쉽게 (재)사용할 수 있도록 Github Actions 플랫폼에서 미리 짜놓은 _Step_이라고 할 수 있다

Resuable extension that can simplify your workflow / Custom application for the GitHub Actions platform that performs a complex but frequently repeated task.

  • Runner
    • workflow가 실행되는 서버로, _하나의 runner당 하나의 job_에 대해서만 실행 가능
    • Github Actions에서는 [Ubuntu, Windwos, MacOS]를 제공하고 있음
    • 추가적은 configuration을 통해서 더 큰 규모의 서버나 다른 OS를 지닌 Runner를 생성할 수도 있음

Test

Iris Dataset을 사용해서 Actions를 활용하는 테스트를 진행해보겠습니다.

  1. Repository 생성
    우선, Actions를 적용할 Repository를 생성해줍니다,
  2. Directory 생성
    해당 Repsitory에 '.github/workflows' 디렉토리를 생성해줍니다.
  3. workflow 작성
    적용시키고자 하는 Workflow가 담긴 YAML파일을 작성해줍니다.
name: iris-workflow
run-name: test for github actions pipeline build
on:
  workflow_dispatch: # manual trigger

jobs:
  load-iris:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4 # checkout to working repository(default=current repository / Other Repository or Branch can be selected using parameters)
      - name: Set up Python 3.10
        uses: actions/setup-python@v4 # set up python in runner
        with:
          python-version: "3.10"
      - name: Install dependencies-1
        run: # install dependencies
          python -m pip install --upgrade pip
      - name: Install dependencies-2
        run: # install dependencies
          pip install numpy pandas scikit-learn joblib
      - name: Load-Iris
        run:
          python main.py

생략되었지만, 당연히 이 workflow를 실행시키는데 필요한 main.py, load_iris.py 와 같은 파일들은 Repository에 들어가 있어야 합니다.

 

참고로, action중 'actions/checkout@v4'와 'actions/setup-python@v4'는 GitHub marketplace에서 제공하는 action으로, 기능은 다음과 같습니다.

1. checkout@v4
    - 작업을 원하는 Repository로 Checkout을 시켜줍니다. Parameter가 없는 경우에는 workflow파일이 있는 Repository로 설정되는 것이 Default값이며, Parameter 설정을 통해, 다른 Repository도 지정 가능 합니다.
    - [actions/checkout](https://github.com/marketplace/actions/checkout)
2. setup-python@v4
    - workflow가 실행될 runner에 python환경을 설치해줍니다.
    - 위 yaml파일에서는 3.10 버전을 설치하도록 설정하였습니다.   
  1. Workflow실행
    workflow를 실행시키는 방법은 위에서 설명했듯, Event에 의해 결정되기 때문에 다양하지만, 저는 수동으로 실행시키는 방법을 택했습니다.
on:
  workflow_dispatch: # manual trigger

위 부분을 통해, 수동으로 실행하도록 설정되었으며, 그 이후에 실행시키는 방법은 다음과 같습니다.
workflow 수동 실행 방법

  1. 결과

Decision Tree로 iris data에 대해서 prediction하는 파이프라인을 실행시켜 보았습니다.

잘 나오는 것 같네요 ㅎ

'ML,DL > Ops' 카테고리의 다른 글

MLOps - 1. DB 사용하기 (feat. Docker)  (0) 2023.03.17
SaaS란?  (0) 2023.02.20