설정파일에 맞춰 workflow를 자동화 해줍니다.
workflow란? test code 실행 혹은 배포 등…
요렇게 Actions 탭에 들어가 시작할 수 있습니다.
Workflow 파일은 yml 확장자로 작성되며,
해당 레포지토리의 .github/workflows 폴더 아래에 저장됩니다.
Simple workflow의 Configure를 누르면 자동으로 주어지는 예시 파일
예시로 주어진 파일만 간단하게 분석해보기~!
설정 가능한 것들 (키워드):
name: CI
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
# Runs a single command using the runners shell
- name: Run a one-line script
run:
YAML
복사
workflow가 실행 될 조건 설정:
1.
push
main 및 release/* 브랜치에 push했을 때 실행될 workflow 설정
on:
push:
branches:
- main # 브랜치 이름
- release/*
YAML
복사
2.
pull request
main 브랜치에 pull request했을 때 실행되게 할 workflow 설정
on:
pull_request:
branches:
- main
YAML
복사
3.
schedule: 특정 시간마다 반복해 동작할 workflow 설정 (cron)
월요일부터 금요일까지 매일 2:00 (UTC)에 workflow가 실행되도록 설정
on:
schedule:
- cron: "0 2 * * 1-5"
YAML
복사
추가로 아래와 같이 TZ라는 env를 설정하면 시간대를 변경할 수 있다.
on:
schedule:
- cron: "0 2 * * 1-5"
env:
TZ: Asia/Seoul
jobs: ...
YAML
복사
수동 트리거
위 처럼 설정하면 push, pr, 혹은 특정 시간마다 job을 실행시킬 수 있지만, 수동으로 테스트가 필요한 경우도 있다.
workflow_dispatch
JOB!
여러 step으로 구성되어있으며, 의존 관계를 설정할 수 있습니다.
runs-on: 원하는 운영체제 위에서 실행시키기
Linux, Windows, macOS를 지원합니다.
jobs:
my_job:
name: deploy to staging
runs-on: ubuntu-18.04
YAML
복사
가능한 종류:
•
ubuntu-latest, ubuntu-18.04, or ubuntu-16.04
•
windows-latest or windows-2019
•
macos-latest or macos-10.15
needs: 의존관계를 설정합니다.
jobs:
build1:
~~
build2:
needs: build1
YAML
복사
build2는 build1이 완료될때까지 기다립니다.
steps
task들의 집합입니다.
jobs:
buildAndTest:
name: CI Pipeline
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
- name: Install dependencies
run: npm install
YAML
복사
run
env를 설정하거나 command를 실행합니다.
name: Install Dependencies
run: npm install
YAML
복사
Action
•
다양한 유저들이 만들고 배포할 수 있는 (재사용 가능한) 코드 단위입니다.
•
개인적으로 만든 Action을 사용할 수도 있고, Marketplace에 있는 Action을 사용할 수도 있습니다.
•
사용할 action이 저장되어있는 레포지토리를 uses에 지정해야합니다.
- name: Setup Node
uses: actions/setup-node@v1 #레포지토리 설정
with:
node-version: '10.x'
YAML
복사
다시 예제 코드 읽어보기!
#CI라는 이름의 Workflow
name: CI
#이 Workflow가 트리거 되기 위한 조건 지정
on:
push: #main브랜치에 push하거나
branches: [ "main" ]
pull_request: #main브랜치에 pull request를 할 때 작동합니다.
branches: [ "main" ]
#앞으로 할 작업들을 그룹화 합니다.
jobs:
#build라는 이름의 job을 추가합니다.
build:
#build가 실행되는 운영체제를 설정합니다.
runs-on: ubuntu-latest
#build에서 실행되는 steps를 그룹화 합니다.
steps:
#actions/checkout@v3을 실행합니다.
- uses: actions/checkout@v3
#step의 이름
- name: Run a one-line script
#env를 설정합니다.
env:
secret_key: ${{ secrets.KEY }}
#command를 실행합니다.
run: make
YAML
복사