해당 포스트는 Github에서 제공하는 Actions 공식 문서를 바탕으로 제작되었습니다.
Github Actions 공식 문서
Overview
Github Actions는 Github에서 제공하는 CI/CD 기능
Component
- Workflow
- workflow를 적용시키고자 하는 Repository에 있는 YAML 파일을 통해서 configurate
- 추가적으로, Workflow는 Repository의
.github/workflows
경로에 정의되어야 함
- 추가적으로, Workflow는 Repository의
- Workflow는 정해진 Event를 통해 실행되거나, 수동으로 실행되거나 혹은 정해진 스케쥴에 따라서 실행 가능
- Event
- 특정 조건이 만족되면 workflow를 실행하도록 하는 Trigger
- Repository에 _새로운 Pull Request, Issue, Push Commit_이 생기거나, _정해진 시간에 workflow를 실행하도록 스케쥴_을 생성하거나, _POST API_를 통해 실행시키거나, 혹은 _수동_으로 실행시킬 수 있다
- 하나의 Repository에 서로 다른 task를 수행하는 한개 이상의 workflow가 정의될 수 있음
- Event 설정 관련 공식문서
- workflow를 적용시키고자 하는 Repository에 있는 YAML 파일을 통해서 configurate
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)를 실행하도록 할 수 있음
- e.g. (1) 이미 build된 Application을 테스트하는 step (2) Application을 build하는 step
- 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를 활용하는 테스트를 진행해보겠습니다.
- Repository 생성
우선, Actions를 적용할 Repository를 생성해줍니다, - Directory 생성
해당 Repsitory에 '.github/workflows' 디렉토리를 생성해줍니다. - 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 버전을 설치하도록 설정하였습니다.
- Workflow실행
workflow를 실행시키는 방법은 위에서 설명했듯, Event에 의해 결정되기 때문에 다양하지만, 저는 수동으로 실행시키는 방법을 택했습니다.
on:
workflow_dispatch: # manual trigger
위 부분을 통해, 수동으로 실행하도록 설정되었으며, 그 이후에 실행시키는 방법은 다음과 같습니다.
workflow 수동 실행 방법
- 결과
Decision Tree로 iris data에 대해서 prediction하는 파이프라인을 실행시켜 보았습니다.
잘 나오는 것 같네요 ㅎ
'ML,DL > Ops' 카테고리의 다른 글
MLOps - 1. DB 사용하기 (feat. Docker) (0) | 2023.03.17 |
---|---|
SaaS란? (0) | 2023.02.20 |