Search
Duplicate
📒

[GitOps CICD] 02. 자동화 작업 - Workflow, Job

상태
완료
수업
GitOps CICD
주제
GithubAction
4 more properties
참고

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

NOTE
사용자가 직접 호스팅하고 관리하는 실행기! (AWS EC2같은 서버를 직접등록)

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
복사
전체 권한관련 용어