GitHub Actions
-
GitHub에서 CI/CD, 자동화 등 개발시 필요한 작업 흐름(workflow)을 유연하게 작성할 수 있도록 제공하는 도구.
-
GitHub의 여러 이벤트와 쉽게 연계해 작업을 수행할 수 있는 것이 특징.
Concept
.github/workflows/
└── *.yaml [Workflow] (1)
├── [Job] (2)
└── [Job]
├── [Step] (3)
└── [Step]
-
Workflow: 워크플로우는
yaml
파일로 작성되었으며, 정해진 Event에 맞게 parallel로 실행됨 -
Job: 워크플로우 실행시 Runner 위에서 실행되는 작업(
jobs
). 기본적으론 parallel, 선택적으로 seqential로 실행 -
Step: Job 내에 정의된 스탭(
steps
). sequential하게 실행
Workflow
-
최상의 개념으로, 하나 이상의 job으로 구성된 자동화 프로세스
-
.github/workflows/
하위에 yaml 파일로 선언적으로 작성
Event
name: workflow-2
on:
workflow_run:
workflows: [ "workflow-1" ]
type: [ complate ]
-
워크플로우를 실행하는 트리거 (Events that trigger workflows)
-
다양한 이벤트 지원
-
GitHub 이벤트 (push, pr, …)
-
스케줄러: UTC 기준의 cron syntax (e.g.
5 * * * *
) (ref) -
수동 이벤트: GitHub API (e.g.
workflow_dispatch
) -
webhook 이벤트: (e.g.
workflow_run
- 특정 워크플로우 시작, 완료시 수행)
-
Job
-
Runner에서 실행되는 Step들의 집합
-
여러 Job이 있을 경우 병렬로 실행됨(default)
-
needs
지시어를 통해 Job같의 순차 실행을 강제할 수 있음 -
artifact를 이용해 job간에 데이터를 주고 받을 수 있음 (Storing workflow data as artifacts)
- name: 'Upload Artifact' uses: actions/upload-artifact@v3 with: name: my-artifact path: my_file.txt retention-days: 5
- name: Download a single artifact uses: actions/download-artifact@v3 with: name: my-artifact
Step
-
task 집합으로 command, action 실행
-
순차적으로 실행됨
Action
-
워크플로우의 가장 작은 단위
-
재사용이 가능한 컴포넌트 (Marketplace - Actions)
Runner
-
GitHub Action runner App이 설치된 머신
-
GitHub Actions workflow가 실행될 서버/인스턴스
-
각 Runner는 한번에 하나의 Job만 실행 가능
-
github-hosted runner, self-hosted runner로 나눠짐
-
shared runner
-
사용중인 organization의 'Settings’의 'Actions’을 들어가면 조회 가능
-
해당 runner 설정('Edit repository access')을 통해 사용할 repository에 권한 설정
-
-
환경변수 설정
-
Repository의 'Settings > Secrets'
-
환경변수 추가
-
yaml에서 아래와 같이 가져다 쓸 수 있음
env: KEY: ${{ secrets.DEPLOY_KEY }} steps: - name: run: echo $KEY
병렬 작업
jobs:
job1:
job2:
needs: job1
job3:
needs: [job1, job2]
vs. Jenkins
-
GitHub Action 언어의
*.yaml
파일 -
Groovy 문법의
Jenkinsfile`