
워크플로우는 기본 구성 요소를 포함해야함
1. 워크플로우를 트리거할 하나 이상의 이벤트
2. 러너 머신에서 실행되는 하나 이상의 작업(jobs)
3. 각 작업은 여러 단계로 구성됨
워크플로우의 갯수는 워크플로우 파일 수 x 트리거 횟수다.
#폴더 구조
.github/workflows/
ci.yml # jobs 3개 포함
CI Pipeline 워크플로우 실행 #1
├─ build job (VM 1에서 실행)
├─ test job (VM 2에서 실행)
└─ checkstyle job (VM 3에서 실행)
# 폴더구조
.github/workflows/
build.yml
test.yml
checkstyle.yml
Build 워크플로우 실행 #1
└─ build job (VM 1에서 실행)
Test 워크플로우 실행 #1
└─ test job (VM 2에서 실행)
Checkstyle 워크플로우 실행 #1
└─ checkstyle job (VM 3에서 실행)
# 1. Push 이벤트
on: push # 코드를 push할 때마다 실행
# 2. 특정 브랜치 Push 이벤트
on:
push:
branches: [ main, dev ] # main 또는 dev 브랜치에 push할 때만 실행
# 3. Pull Request 이벤트
on:
pull_request:
types: [opened, reopened] # PR이 생성되거나 다시 열릴 때 실행
# 4. 스케줄 이벤트
on:
schedule:
- cron: '0 0 * * *' # 매일 자정에 실행
# 5. 수동 실행 이벤트
on:
workflow_dispatch: # GitHub UI에서 수동으로 실행 가능
Jobs에 build/ checkstyle/coverage를 넣는다면,
이 job들은 각각 새로운 독립된 가상머신에서 실행된다.
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: ./gradlew build
checkstyle:
needs: build # build 작업이 성공해야 실행
runs-on: ubuntu-latest
steps:
- run: ./gradlew checkstyle
coverage:
needs: build # build 작업이 성공해야 실행
runs-on: ubuntu-latest
steps:
- run: ./gradlew test
워크플로우를 실행시키는 트리거 이벤트 종류
1. 저장소 내부 이벤트(push, pull request)
2. github 외부 이벤트
3. 예약된 시간
4. 수동 실행
jobs:
setup:
runs-on: ubuntu-latest
steps:
- run: ./setup_server.sh
build:
needs: setup # setup 작업이 완료되어야 실행
steps:
- run: ./build_server.sh
strategy:
matrix:
node: [14, 16] # Node.js 14와 16 버전에서 각각 실행
하나의 환경만 참조 가능