Github Actions์ event
1. push
- ๋ ํ์งํ ๋ฆฌ / .github / workflows / push.yaml ํ์ผ ์์ฑํ๊ธฐ
- push.yaml
- name : ์ก์ ์ฐฝ์์ ํํ ๋ ์๊ฐํ ์ด๋ฆ
- on : ์ํฌํ๋ก์ฐ ํธ๋ฆฌ๊ฑฐ ํ ์ด๋ฒคํธ. ํธ๋ฆฌ๊ฑฐ ํ์
- jobs : ์คํ์ํฌ job์ ์งํฉ. ํ์
- custom-job-name : job์ด๋ฆ์ ์์
- runs on : job์ ์คํ์ํฌ runner ์ง์ ํ๊ธฐ
- steps : step์ ์งํฉ
- - name : job์ด ์คํ์ํฌ ์คํญ ์ ์ํ๊ธฐ. ์คํญ๋ง๋ค ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ์์ฑ/์๋ต ๊ฐ๋ฅ
- run : step์์ ์คํํ ๋ด์ฉ. |๋ฅผ ์ด์ฉํ๋ฉด ๋ฉํฐ๋ผ์ธ ์ปค๋งจ๋ ์์ฑ ๊ฐ๋ฅ
name: push-workflow
on: push
jobs:
push-job:
runs-on: ubuntu-latest
steps:
- name: step1
run: echo hello hello hello world 1
- name: step2
run: |
echo hello world 2
echo github action first-day
2. pull request
- ๋ณ๊ฒฝ์ฌํญ์ ์ฝ๋ ์ ์ฅ์์ ํฉ๋ณ์ํฌ ๋ ํ์ฉํ๋ pull request
- on : pull_request
- types : ์กํฐ๋นํฐ ํ์ ์ผ๋ก ์ข ๋ ์ธ๋ฐํ๊ฒ ์ค์ ๊ฐ๋ฅ
name: pull-request-workflow
on:
pull_request:
types: [opened]
jobs:
pull-request-job:
runs-on: ubuntu-latest
steps:
- name: step1
run: echo hello pull-request world
- name: step2
run: |
echo hello world
echo github action pull-request
์ธ๋ถ์ ์ธ activity ํ์ ์ ์ง์ ํ์ง ์์ผ๋ฉด default activity type์ธ opened, synchronize, reopened ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค GitHub Action์ด ํธ๋ฆฌ๊ฑฐ ๋จ
ํ ๋ฆฌํ์คํธ๊ฐ open๋ ๋๋ง ๊นํ๋ธ ์ก์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ํ๋ฉด ๋ช ์์ ์ผ๋ก ์กํฐ๋นํฐ ํ์ ์ ์ง์ ํด์ฃผ๊ธฐ
์ด๋ฒคํธ๋ฅผ ์ธ๋ฐํ๊ฒ ์ง์ ํ๊ธฐ ์ํด์๋ on - ์ด๋ฒคํธ์ types ํค์๋์ ํ์ ์ ๋ช ์ํด์ค์ผํจ
3. issue
- ๋ฒ๊ทธ, ๊ธฐ๋ฅ ์์ฒญ, ์ง๋ฌธ, ๋ ผ์ ๋ฑ ์ถ์ ๋ฐ ๊ด๋ฆฌ
- ํ๋ก์ ํธ์ ๋ฒ๊ทธ๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ฑ์ ์งํ ์ํฉ ํ์ ๊ฐ๋ฅํจ
- ๊นํ๋ธ ์๋จ์ Issues ํญ์์ ์์ฑ ๊ฐ๋ฅํจ
- ์ด์ํญ์ด ๋ณด์ด์ง ์๋๋ค๋ฉด ์ ํ ์์ Features - Issues ํ์ฑํ ํด์ฃผ๊ธฐ
- ๋ชจ๋ ์กํฐ๋นํฐ ํ์ ์ ์ํด ํธ๋ฆฌ๊ฑฐ๊ฐ ๋จ
- ์ด์๊ฐ ์คํ ๋ ๋๋ง ํธ๋ฆฌ๊ฑฐ ๋๋ yaml ์์
name: issue-workflow
on:
issues:
types: [opened]
jobs:
issue-job:
runs-on: ubuntu-latest
steps:
- name: step1
run: echo hello issue-world
- name: step2
run: |
echo hello world
echo github action of issue-workflow
- ์ด์ ์ด๋ฒคํธ๋ ์ค์ง ๋ํดํธ ๋ธ๋์น์์๋ง ํธ๋ฆฌ๊ฑฐ๋จ
- ๊ทธ ํ์ผ์ด ๋ํดํธ ๋ธ๋์น์ ์กด์ฌํด์ผ ํ๋ค๋ ๊ฒ
4. issue comment
- issue ์ด๋ฒคํธ์ ์ฝ๋ฉํธ๋ฅผ ๋ค๋ ๊ฒ
- pull request ์ด๋ฒคํธ์ ์ฝ๋ฉํธ๋ฅผ ๋ค๋ ๊ฒ
- ์ด์ ์ด๋ฒคํธ์ฒ๋ผ ๋ํดํธ ๋ธ๋์น์์๋ง ๋์
- ๋ชจ๋ ์กํฐ๋นํฐ ํ์ ์ ๋ํด์ ํธ๋ฆฌ๊ฑฐ ๋จ
- if : ๊น ํ๋ธ ์ปจํ ์คํธ ์ฌ์ฉ (๋์ค์ ๋ณด์ถฉ์ค๋ช ), job์ด ์คํ๋๊ธฐ ์ ์ ์กฐ๊ฑด์ ๊ฑธ ์ ์์
- ์์ yaml
- job_1 : pull request์ ์ฝ๋ฉํธ๋ฅผ ๋ฌ ๋ ์คํ๋จ / job_2 : issue์ ์ฝ๋ฉํธ๋ฅผ ๋ฌ ๋ ์คํ๋จ
name: issue-comment-workflow
on: issue_comment
jobs:
pr-comment:
if: ${{ github.event.issue.pull_request }}
runs-on: ubuntu-latest
steps:
- name: pr comment
run: echo ${{ github.event.issue.pull_request }}
issue-comment:
if: ${{ !github.event.issue.pull_request }}
runs-on: ubuntu-latest
steps:
- name: issue comment
run: echo ${{ github.event.issue.pull_request }}
5. schedule
- ํน์ ์๊ฐ์ Github Workflow๋ฅผ ์คํํ๋
- cron ํค์๋๋ฅผ ์ฌ์ฉํจ. ํธ๋ฆฌ๊ทธ ๋ ์๊ฐ์ ์ง์ ํ ์ ์์
- ์ค์ผ์ค ์ด๋ฒคํธ๋ ๋ํดํธ ๋ธ๋์น์ GitHub Action Workflow๊ฐ ์์ด์ผ๋ง ๋์ํจ
- ๊ทธ๋ฌ๋ ์ง์ ํ ์๊ฐ์ ์ ํํ ๋์ํ์ง ์์ ๋๊ฐ ์์
- Github Actions ์ฌ์ฉ์ ๋ํ ๋์ ๋ถํ๊ฐ ์๋ ๊ฒฝ์ฐ ๋๋ ์ด ๋๊ธฐ๋ ํ๊ฑฐ๋, ์์ ์คํ๋์ง ์๊ธฐ๋ ํจ
- 5๋ถ ๊ฐ๊ฒฉ, 30๋ถ ๊ฐ๊ฒฉ์ ์์ ์ ๋๋๋ ๊ฐ๋ฅ์ฑ ์์
- ์ ํด์ง ์๊ฐ์ ๊ผญ ์คํ๋์ด์ผ ํ๋ ์์ ์ธ ๊ฒฝ์ฐ ๊นํ์ก์ ์ค์ผ์ค๋ง ์ฌ์ฉ X
6. workflow_dispatch
- ์ฌ์ฉ์๊ฐ ์ํ ๋ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐํ ์ ์
- ๋ํดํธ ๋ธ๋์น์์๋ง ๋์ํจ
- ์ธํ๊ฐ์ ๋ฃ์ผ๋ฉด ๊นํ์ก์ ์์ ๋ฐ์์ฌ ์ ์์
- ์ธํ๊ฐ์ ์ ์ํ๋ ค๋ฉด ์ด๋ฒคํธ์์ inputs ํค์๋ ์ฌ์ฉํ๊ธฐ
- ์ธํ ๋ฐ์ดํฐ ํ์
- String, number, boolean, choice
name: workflow_dispatch
on:
workflow_dispatch:
inputs:
name:
description: 'set name'
required: true
default: 'github-actions'
type: string
environment:
description: 'set env'
required: true
default: 'dev'
type: choice
options:
- dev
- qa
- prod
jobs:
workflow-dispatch-job:
runs-on: ubuntu-latest
steps:
- name: step1
run: echo hello world
- name: step2
run: |
echo hello world
echo github action
- name: echo input
run: |
echo ${{ inputs.name }}
echo ${{ inputs.environment }}
๋ค์ํ ์ด๋ฒคํธ๋ก ํ๋์ ์ํฌํ๋ก์ฐ ํธ๋ฆฌ๊ฑฐ ํ๊ธฐ
name: multiple-event-workflow
on:
push: {} # push ์ด๋ฒคํธ์ ๋ํ ์ธ๋ถ ์ค์ ์ ๋ช
์์ ์ผ๋ก ๋น์๋๊ธฐ
issues:
types: [opened] # issues ์ด๋ฒคํธ์ ๋ํด "opened" ํ์
๋ง ๋ฐ์ํ๋๋ก ์ค์
workflow_dispatch: # ์๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ํด workflow_dispatch ์ด๋ฒคํธ ์ถ๊ฐ
jobs:
multiple-event-job:
runs-on: ubuntu-latest
steps:
- name: step1
run: echo hello world
- name: step2
run: |
echo hello world
echo github action
- multipleEvent.yaml ํ์ผ push๋ก ์ธํด ๋ฐ๋ก ์ก์ ๋ฐ์ํจ
needs
- ํ๋์ ์ํฌํ๋ก์ฐ ์์์ ์ฌ๋ฌ ๊ฐ์ job์ ์ ์ํด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ์ฌ๋ฌ ๊ฐ์ job์ ์ ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๋ ฌ ์คํ
- job ์ฌ์ด์ ์ข ์์ฑ์ด ํ์ํ ๊ฒฝ์ฐ needs ํค์๋๋ฅผ ์ฌ์ฉ
- job1 -> job2 / job3 -> job4 ์ข ์์ฑ์ ๊ฐ์ง needs.yaml ์์ ์์ฑ
- exit 1 : ๊ฐ์ ์คํจ ์ํค๊ธฐ
name: needs
on: push
jobs:
job1:
runs-on: ubuntu-latest
steps:
- name: echo
run: echo "job1 done"
job2:
runs-on: ubuntu-latest
needs: [job1]
steps:
- name: echo
run: echo "job2 done"
job3:
runs-on: ubuntu-latest
steps:
- name: echo
run: |
echo "job3 failed"
exit 1
job4:
runs-on: ubuntu-latest
needs: [job3]
steps:
- name: echo
run: echo "job4 done"
- ๊นํ๋ธ ์ก์ ์์๋ ์ข ์์ฑ ์๋ job์ด ์คํจํ๋๋ผ๋ ์คํํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํจ (if condition)
re-run
- ๊ณผ๊ฑฐ์ ์คํ๋ ์ํฌํ๋ก์ฐ๋ฅผ ์ฌ์คํํจ
- ์ฑ๊ณต, ์คํจ ์ฌ๋ถ์ ์๊ด ์์ด ์ฌ์คํ ๊ฐ๋ฅํจ
- ํธ๋ฆฌ๊ฑฐ๋ ๊ทธ ์์ ์ ๋ค์ ์คํ
- ๊ณผ๊ฑฐ์ ์คํ๋ ์ํฌํ๋ก์ฐ๋ฅผ re-runํด๋ ์์ ํ ๋ด์ฉ(์ํฌํ๋ก์ฐ ์คํ ํ ์์ ๋ ๋ด์ฉ)์ ๋ฐ์๋์ง ์์
'๐ฅ๏ธ ๋ฐฑ์๋ > CICD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CICD] ๊ธฐ์ด ์๋๋ฆฌ์ค ๊นํ ์ก์ (0) | 2024.03.23 |
---|---|
[CICD] ํค์๋ ๊ธฐ๋ฐ ์ด์ ์๋ฆผ ์๋ํ (0) | 2024.03.23 |
[CICD] ๊นํ ๋ ํฌ ์์ฑ ์๋ํ (0) | 2024.03.23 |
[CICD] Github Actions์ ๋ค์ํ ๊ธฐ๋ฅ (0) | 2024.03.22 |
[CICD] ๊นํ๋ธ ์ก์ ์ปดํฌ๋ํธ (0) | 2024.03.21 |