[Git] Github Action 사용법
Github에선 workflow를 자동화 할 수 있는 기능을 제공한다. 대표적인 workflow 자동화 프로그램으로는 Jenkins가 있는데 간단한 업무를 Github에서 제공하는 Action으로 어느정도 대체가 가능하다.
대신 위 기능은 각 repository 별 최대 등록 가능한 workflow 개수가 제한되며 각종 resource (runtime, memory size) 등이 제한된다.
활용처
Sanity check
Source code의 build 및 test 수행을 쉽게 자동으로 수행시킬 수 있다.
Release
해당 서비스를 배포를 해야되는 경우 따로 시간을 내어 release를 하지 않고 자동으로 특정 주기를 설정해 배포 할 수 있다.
Data scraping
만약 주기적으로 어떤 주제에 대한 data를 수집하고 싶을 때 위 기능을 통해 수행 가능하다.
Github Action Core
Workflow
여러 job으로 구성되며 event에 의해 triggered 될 수 있는 자동화된 process를 말한다. 최상위 개념이며 workflow는 기본적으로 YAML file로 작성되며 repository의 .github/workflows
에 저장된다.
Event
Workflow를 trigger하는 특정 활동이나 규칙을 의미한다. 예를 들면
- 특정 branch로 push
- 특정 branch pull request
- 특정 시간대 반복
- Webhook을 사용해 외부 이벤트 통해 실행
자세한 설명: Events that trigger workflows
Job
Job은 여러 step으로 구성되고 가상 환경의 instance에서 실행된다. 각 job은 독립적으로 병렬로 실행 가능하다.
Step
Task들의 집합으로 command를 날리거나 action을 실행 할 수 있다.
Action
Workflow의 가장 작은 block으로, Job을 만들기 위해 Step들을 연결 할 수 있다. Action은 재사용이 가능한 component다.
Github에서 제공하는 Action을 사용 할 수도 있고, custom action을 사용 할 수도 있다.
Runner
Github Action Runner 어플리케이션이 설치된 머신으로, workflow가 실행될 instance다. 크게 Github에서 호스팅 해주는 1) Github-hosted runner와 2) 직접 호스팅하는 self-hosted runner로 나뉜다.
Example
Github action 기능을 이용해 python file을 실행시키는 예제다.
Python 파일 작성
# hello.py print("Hello World")
우선 Repository를 생성한 뒤에 위와 같이 파일을 만들어준다.
Workflow 생성
Actions
-> Simple workflow
-> Configure
위 메뉴 선택을 통해 initial workflow 파일 작성을 할 수 있다.
# This is a basic workflow to help you get started with Actions name: CI # Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the "main" branch push: branches: [ "main" ] pull_request: branches: [ "main" ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 # Runs a single command using the runners shell - name: Run a one-line script run: echo Hello, world! # Runs a set of commands using the runners shell - name: Run a multi-line script run: | echo Add other actions to build, echo test, and deploy your project. python3 hello.py
여기서 마지막 run:
에서 python3 hello.py
를 작성해주고 해당 파일을 commit 해주면 된다. 나같은 경우 python.yml
로 저장했다.
Run action
Actions
탭을 선택하게 되면 이제 우리가 작성한 workflow 이름 (위 workflow의 경우 CI
로 지정됐다.) 으로 된 workflow가 보이며 해당 workflow의 yml 파일을 선택하게 되면 수행 출력 결과를 볼 수 있다.
Actions
-> python.yml
-> build
결과를 보면 우리가 작성한 step 중 Run a multi-line script
에서 Hello World
가 출력된 것을 볼 수 있다.
Reference
- https://zzsza.github.io/development/2020/06/06/github-action/
- https://www.actionsbyexample.com