참고
WorkFlow
NOTE
Workflow ⇒ 자동화 작업의 가장 상위 개념, 하나 이상의 작업을 실행시키는 구성!
.github/workflow 파일에 정의
•
깃허브 레포지토리에서 발생되는 이벤트(코드 푸시, 이슈 생성)이 발생할때 자동으로 실행된다!
워크플로우 트리거
NOTE
워크플로우 트리거 ⇒ 워크플로우를 발생시키는 이벤트!
여러 종류의 이벤트가 존재한다. (위의 이미지에 나온종류 이외에도 굉장히 많음..)
# 1. 워크플로우가 위치한 레포지토리에서 발생한 이벤트
name: Triger1
on:
# 푸쉬 이벤트 참고
push: # push || pull-_request || fork || release
branches: # 브랜치 선택, !(부정), *(와일드카드) 사용가능
- '*'
- '!master'
- '!test-**'
paths: # 경로 (해당 파일이 push되어야한다.)
- '**.js'
paths-ignore: # 경로무시 (해당 파일의 push는 무시한다.)
- 'README.md'
- '.github/workflows/**'
tags: # 특정 태그를 푸시하면 발생한다.
- v1.*
# 풀 리퀘스트 이벤트 참고
pull_request:
types:
- opened # 풀 리퀘스트가 열린경우(이외에도 굉장히 많은 유형이 존재)
paths:
- 'trigger/test' # 해당 경로에 파일이 있어야한다!
YAML
복사
1. 워크플로우가 위치한 깃헙 레포의 이벤트
name: Triger2
on:
# 이슈 이벤트 참고
issues:
types: [opened, edited, labeled, unlabeled]
YAML
복사
2. 이슈, 프로젝트 등 레포와 관련된 이벤트
name: Triger3
on:
schedule:
- cron: '*/5 * * * *' # 여러개 등록가능
YAML
복사
3. 특정 시간 간격으로 실행하는 경우
name: Triger4
on:
# 워크플로우 이벤트 참고
workflow_dispatch: # 수동으로 동작
inputs: # 입력을 제공받는다.
tag:
description: 'Tag to deploy'
required: true
default: '1.0.0
workflow_run: # 특정 워크플로우가 실행되면 동작한다.
workflows: ["Triger2"]
types:
- completed
YAML
복사
4. 수동실행 및 특정 워크플로우 동작시 실행하는 경우
워크플로우 아티팩트
NOTE
Aritifact ⇒ 크게는 개발한 결과, 산출물의 의미를 가지며 CI에서는 빌드 과정 후 생긴 배포 가능한 아웃풋을 의미한다! (컴파일된 파일, 컨테이너 이미지)
배포되기전 Test까지 마친 결과물을 의미한다.
Artifact를 통한 Job 결과물 공유
•
워크플로우를 구성하는 Job은 개별적인 실행기(Runner)로 실행되므로 서로 결과를 넘길수가 없다.
•
아티팩트를 이용해서, 워크플로우가 실행되는 동안, 이전에 동일 업로드된 아티팩트를 다운받아서 다른 Job의 Artifact를 다운받아 사용할 수 있다!
name: Artifacts
on: workflow_dispatch
jobs:
# job 1 => 랜덤 숫자값을 만든다.
job-1:
runs-on: ubuntu-latest
steps:
- name: Get Random UUID
id: uuid
run: echo "::set-output name=uuid::$(uuidgen)"
- name: Print UUID
run: |
echo "UUID: ${{ steps.uuid.outputs.uuid }}"
echo "${{ steps.uuid.outputs.uuid }}" > uuid.txt
- name: Upload UUID
uses: actions/upload-artifact@v3
with: # with는 map작업에 의해 정의된 입력 매개변수
name: uuid # 이름
path: uuid.txt # 업로드 경로
# job 1에서 생성한 Artifact를 가져와서 출력한다.
job-2:
runs-on: ubuntu-latest
needs: job-1
steps:
- name: Download UUID
uses: actions/download-artifact@v3
with:
name: uuid
- name: Print UUID
run: |
echo "UUID: $(cat uuid.txt)"
YAML
복사
Job
NOTE
Job ⇒ 워크플로우 내에서 실행되는 단위 작업에 대한 정의!
각 Job은 Step으로 구성되며 순차적으로 실행된다.
Job Runner ⇒ 작업이 실행되는 환경! , 실행OS는 거의 대부분을 지원한다.
Github Hosting Runner
NOTE
Github에서 관리하는 클라우드 기반 실행기!
OS를 선택해서 진행할 수 있다!
name: OS Select
on:
workflow_dispatch:
inputs:
os:
description: 'Runner OS'
required: true
default: 'ubuntu-latest'
type: choice
options:
- 'ubuntu-latest'
- 'windows-latest'
- 'macos-latest'
YAML
복사
os를 select로 선택받을 수 있다.
os 2가지 * 버전 3가지 ⇒ 6종류의 러너 실행
name: OS matrix
on: workflow_dispatch
jobs:
build:
name: Multi OS Build
strategy:
matrix:
os: [ubuntu-20.04, ubuntu-22.04] # os 종류
version: [10, 12, 14] # 버전 종류
runs-on: ${{ matrix.os }}
YAML
복사
Self-hosted Runner
Job 동시작업 - needs, groups
NOTE
기본적으로 동일 워크플로우의 작업은 병렬수행이 기본정책이다!
Job 1~3중 어떤것이 먼저 끝날지 모른다.
needs 속성을 이용해서 어떤작업이 완료되고 나서 수행되도록 컨트롤할 수 있다.
name: Concurrency Job with needs
on: workflow_dispatch
jobs:
job-1:
name: Concurrency Job Test 1
runs-on: ubuntu-latest
steps:
job-2:
name: Concurrency Job Test 2
runs-on: ubuntu-latest
needs: job-1
steps:
job-3:
name: Concurrency Job Test 3
runs-on: ubuntu-latest
needs: job-2
steps:
job-4:
name: Concurrency Job Test 4
runs-on: ubuntu-latest
needs: job-3
steps:
YAML
복사
Group을 설정하면, Group내 작업의 동시 수행을 하나만 되도록 설정할 수 있다.
2개의 그룹에서 하나를 먼저 시작하는 모습
---
name: Concurrency Job with 2 Groups
on: workflow_dispatch
jobs:
job-1:
name: Concurrency Job Test 1
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-1
steps: #..
job-2:
name: Concurrency Job Test 2
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-1
steps: #..
job-3:
name: Concurrency Job Test 3
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-2
steps: #..
job-4:
name: Concurrency Job Test 4
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-2
steps: #..
YAML
복사
Github Action 권한
NOTE
name: "My workflow"
on: [ push ]
permissions: read-all # 해당 위치에서 권한 작성가능
jobs:
stale:
runs-on: ubuntu-latest
permissions: # 작업단위로 적용도 가능
issues: write
pull-requests: write
YAML
복사
permissions:
actions: read|write|none
checks: read|write|none
contents: read|write|none
deployments: read|write|none
id-token: read|write|none
issues: read|write|none
discussions: read|write|none
packages: read|write|none
pages: read|write|none
pull-requests: read|write|none
repository-projects: read|write|none
security-events: read|write|none
statuses: read|write|none
YAML
복사
전체 권한관련 용어