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`