-
Notifications
You must be signed in to change notification settings - Fork 1
CI CD์ Github Action
- ์์ฑ์: J045_๊น์ํธ
-
์ฐธ๊ณ ์๋ฃ
https://www.ciokorea.com/insider/233289
https://tecoble.techcourse.co.kr/post/2021-08-14-ci-cd/
https://www.martinfowler.com/articles/continuousIntegration.html
CI/CD(Continuous Integration / Continuous Delivery ยท Deployment, ์ง์์ ํตํฉ ๋ฐ ์ง์์ ์ ๊ณต) ์ ๊ฐ๋ฐ์๊ฐ ์์ฃผ, ์์ ์ ์ผ๋ก ์ฝ๋ ๋ณ๊ฒฝ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฌธํ์ ์ด์์์น, ์ผ๋ จ์ ์์ ๋ฐฉ์์ ์๋ฏธํ๋ค. DevOps ๋ฐ ์ ์์ผ ๋ฐฉ๋ฒ๋ก ์ ๊ถ์ฅ ์ฌํญ์ด๋ค.
์ฐ๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ , ๋น๋ํ ๋ค ๋ฐฐํฌ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค. ์ด๋ ๊ฒ ๋ฐฐํฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ค๋ฅ ์ ๋ฌด๋ฅผ ํ๋จํ๊ธฐ ์ํด ์ฌ๋ฌ ํ ์คํธ๋ฅผ ๊ฑฐ์น๊ณค ํด์ผํ๋ค. ์ด๋ฌํ ๋ฐ๋ณต์ ์ด๊ณ , ์ค์๊ฐ ์๊ธธ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์ ๋ค์ ๊ฐ๋จํ๊ฒ ํ๊ธฐ ์ํด CI/CD๋ฅผ ํ์ฉํ๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐํ์ ์ฝ๋ ํ์ง๊ณผ ์ํํธ์จ์ด ๋ณด์์ ๋ณด์ฅํจ๊ณผ ๋์์ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋๋ฐ ์ง์คํ ์ ์๋ค.
CI, ์ง์์ ํตํฉ์ ๊ฐ๋ฐํ ๋ด์์ ๊ฐ์์ ์์ ๋ฌผ์ ํ๋๋ก ํตํฉํ๊ธฐ ์ํ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด๋ค. ๊ฐ ํตํฉ์ ํ ์คํธ๋ฅผ ํฌํจํ ์๋ํ๋ ๋น๋๋ฅผ ํตํด ๊ฐ ์์ ๋ฌผ์ ๊ฒ์ฆํ ์ ์๋ค. ์ง์์ ํตํฉ์ด๋ผ๋ ๊ฐ๋ ์ ์ต์คํธ๋ฆผ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฐ ํ๋ก์ธ์ค์์ ์ ๋ํ์๋ค.
CI๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ชจ๋ ๊ฐ๋ฐ์ด ์ข ๋ฃ๋ ๋ค์ ์ปดํ์ผ/๋น๋/๋ฐฐํฌ๋ฅผ ๊ฑฐ์ณ์ผ ์ค๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํ๊ณ ์์ ์ ํ ์ ์์๋ค. ํ์ง๋ง, CI๋ฅผ ๋์ ํจ์ผ๋ก์จ ๊ฐ ๊ฐ๋ฐ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ , ์ด๋ฅผ main ๋ธ๋์น์ ๋ณํฉํ์ฌ ๊ทธ๋๊ทธ๋ ๋น๋ํจ์ผ๋ก์จ ๋ฒ๊ทธ ์ ๋ฌด๋ฅผ ๋น ๋ฅด๊ฒ ํ๋จํ ์ ์๋ค.
์ด๋ฌํ ํตํฉ ๊ณผ์ , ๋ค์ ๋งํด ์ปดํ์ผ/๋น๋/๋ฐฐํฌ ๊ณผ์ ๊ณผ ํ ์คํธ๋ฅผ ์ง์ ์ํํ๋ ๊ฒ์ ์๊ฐ ์๋ชจ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ์๋ํํ์ฌ ๋น๋ ๊ฐ๋ฅ ์ฌ๋ถ / ์ค๋ฅ ์ ๋ฌด๋ฅผ ์๋์ผ๋ก ๊ฒ์ฆํ ์ ์๋ค.
์ฆ, CI๋ฅผ ๋์ ํจ์ผ๋ก์จ ๋ฒ๊ทธ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์๊ณ , ์ํํธ์จ์ด ํ์ง ๊ฐ์ ๋ฐ ์ ๋ฐ์ดํธ ๊ฒ์ฆ ๋ฐ ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ ์ํ๊ฒ ํ ์ ์๋ค.
Martin Fowler๋ CI๋ฅผ ์ํด ์ต์ํ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผํ๋ค๊ณ ํ๋ค.
- ๋น๋ ์๋ํ ๊ตฌ์ถ
- ํ ์คํธ ์๋ํ
- ์ปค๋ฐ ๋น๋ ์๋ ํฅ์
- ์ฒ์๋ถํฐ ํ๋ก์ ํธ์ CI ๋์ . ๋น๋ ์๊ฐ์ด ๊ธธ์ด์ง๊ธฐ ์์ํ๋ฉด ์ฆ์ ์กฐ์น๋ฅผ ์ทจํ ๊ฒ.
CD(Continuous Delivery / Deploy, ์ง์์ ์ ๊ณต / ๋ฐฐํฌ) ๋ ์ ๊ณตํ ์ํํธ์จ์ด๋ฅผ ํญ์ ์ ๋ขฐ ๊ฐ๋ฅํ ์์ค์์ ๋ฐฐํฌ๋ ์ ์๋๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ง์์ ์ ๊ณต ์ ์์ CI๋ฅผ ํตํด ์์ค์ฝ๋์ ๋น๋ ๋ฐ ๋ฒ๊ทธ ํ์ ์ ์ฑ๊ณต์ ์ผ๋ก ์งํํ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ ์ฅ์์ ์ ๋ก๋ํ๋ ๊ฒ์ ์๋ฏธํ์ฌ, ์ง์์ ๋ฐฐํฌ๋ ์ ์ฅ์์ ์ ๋ก๋ํ ๊ฒ์ ๋ฐฐํฌํ๊ฒฝ์ ๋ฆด๋ฆฌ์ฆํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋น๋์ ํ ์คํธ, ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์๋ํํ ์ ์๋ CI/CD ํ๋ซํผ์ด๋ค. ๊ฐ PR์ ๋ํ ๋น๋์ ํ ์คํธ๋ฅผ ์งํํ๊ฑฐ๋ ๋ณํฉ๋ PR์ ํ๋ก๋์ ์ผ๋ก ๋ฐฐํฌํ๋ ์ํฌํ๋ก์ฐ๋ฅผ ์์ฑํ ์ ์๋ค.
Github Action์ DevOps ๊ทธ ์ด์์ ๋ฐ๋ผ๋ณด๊ณ ์์ผ๋ฉฐ, ๋ ํฌ์งํ ๋ฆฌ์ ๋ค๋ฅธ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์์ ๋ ์ํฌํ๋ก์ฐ๋ฅผ ์คํํ ์ ์๋๋ก ํด์ค๋ค. ๊นํ๋ธ๋ ๋ฆฌ๋ ์ค, ์๋์ฐ, MacOS ๊ฐ์ ๋จธ์ ์ ์ด์ฉํ์ฌ ์ํฌํ๋ก์ฐ๋ฅผ ์คํํ ์ ์๊ณ , ํน์ ๋ ๋ฆฝ์ ์ผ๋ก ์ด์ํ๋ ์๋ฒ๋ฅผ ์ฐ๊ฒฐํ์ฌ ์คํ์ํฌ ์ ์๋ค.
ํน์ ์ด๋ฒคํธ์ ๋ํ ๊นํ ์ก์ ์ํฌํ๋ก์ฐ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ, ๊ฐ ์ํฌํ๋ก์ฐ๋ ๋ณ๋ ฌ์ ์ผ๋ก, ํน์ ์ ์ฐจ์ ์ผ๋ก ์คํํ ํ๋ ์ด์์ Job์ ๊ฐ๋๋ค. ๊ฐ Job๋ค์ Runner๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฐ์ ๋จธ์ , ํน์ Container ๋ด์์ ๋์ํ๋ฉฐ, Job๋ค์ ๊ฐ๊ฐ ํ๋ ์ด์์ Step๋ค์ ๊ฐ๋๋ค. Step์ ์์ฑํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ฑฐ๋, ์ํฌํ๋ก์ฐ ๊ฐ์ํ๋ฅผ ์ํด Action ์ด๋ผ๋ ์ฌ์ฌ์ฉ ์ต์คํ ์ ์ ์คํํ ์ ์๋ค.
๊ทธ๋ฆผ) Github Action Workflow (์ถ์ฒ: https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions)
1. Workflow
ํ๋ ์ด์์ Job๋ค์ ์คํํ๋, ์ค์ ๊ฐ๋ฅํ ์๋ํ ํ๋ก์ธ์ค๋ฅผ ์๋ฏธํ๋ค. ์ด๋ค์ ๋ ํฌ์งํ ๋ฆฌ ๋ด์ YAML ํ์ผ๋ก ์ ์ํ ์ ์์ผ๋ฉฐ, ๋ ํฌ์งํ ๋ฆฌ ๋ด์์ ๋ฐ์ํ ์ด๋ฒคํธ์ ์ํด ์คํ๋๊ฑฐ๋, ์ง์ ํ ์๊ฐ์, ํน์ ์๋์ผ๋ก ์คํํ ์ ์๋ค. ์ด๋ค์ ๋ ํฌ์งํ ๋ฆฌ์ .github/workflows
์ ์ ์ฅํ๋ฉฐ, 1๊ฐ ์ด์ ์กด์ฌํ ์ ์๋ค.
2. Events
์ํฌํ๋ก์ฐ๋ฅผ ์คํ์ํฌ ์ ์๋, ๋ ํฌ์งํ ๋ฆฌ ๋ด์์์ ํน์ ํ๋/๋์(Activity)์ ์๋ฏธํ๋ค. Github์์ PR์ ์์ฑํ๊ฑฐ๋, ์ค์ผ์ฅด์ ๋ฐ๋ผ ์คํํ๊ฑฐ๋, ์๋์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ผ์ผํฌ ์๋ ์๋ค.
3. Jobs
๊ฐ์ Runner์์ ์คํ๋๋, ์ํฌํ๋ก์ฐ ๋ด์ ์กด์ฌํ๋ Step ์งํฉ์ ์๋ฏธํ๋ค. ๊ฐ Step์ ์คํํ ์ ์คํฌ๋ฆฝํธ๋ Action์ ๋ปํ๋ค. Step๋ค์ ์์๋๋ก ์คํํ๋ฉฐ, ๋ค๋ฅธ Step์ ์์กด์ฑ์ ๊ฐ๋๋ค. ๊ฐ Step๋ค์ ๊ฐ์ Runner์์ ์คํ๋๊ธฐ ๋๋ฌธ์, Step ๊ฐ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
์ผ๋ฐ์ ์ผ๋ก Job๋ค์ ๋ค๋ฅธ Job๋ค๊ณผ์ ์์กด์ฑ์ ๊ฐ์ง ์์ง๋ง, ์์กด์ฑ์ ๊ฐ๋๋ก ์ค์ ํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ, ์์กด์ฑ์ด ์๋ Job์ด ์ข ๋ฃ๋ ๋๊น์ง Job ์คํ์ ๋๊ธฐํ๋ค.
4. Actions
๋ณต์กํ๊ณ ์์ฃผ ๋ฐ๋ณตํ๋ ์์ ์ ์คํํ๋, Github Action์ ์ํ ์ฌ์ฉ์ ์ ์ Application์ด๋ค. ์ด๋ ์ฌ์ฌ์ฉ์ ํตํด ์ํฌํ๋ก์ฐ์์์ ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์์ฑ์ ์ค์ผ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด Github์์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ pullํ๊ฑฐ๋, ๋น๋ ํ๊ฒฝ์์ ์ฐ์ผ toolchain์ ์ค์นํ๊ฑฐ๋, ํด๋ผ์ฐ๋ ์ ๊ณต์์ ๋ํ ์ธ๊ฐ๋ฅผ ์ํํ ์ ์๋ค.
Action์ ์ง์ ์์ฑํ ์๋ ์๊ณ , Github Marketplace์์ ๋ค์ด๋ก๋๋ฐ์ ์ ์๋ค.
5. Runners
์ํฌํ๋ก์ฐ๋ฅผ ์คํํ ์๋ฒ๋ฅผ ์๋ฏธํ๋ค. ๊ฐ Runner๋ ํ๋ฒ์ ๋จ ํ๋์ Job๋ง์ ์คํํ ์ ์๋ค. Github๋ ์ํฌํ๋ก์ฐ ์คํ์ ์ํด ์ฐ๋ถํฌ ๋ฆฌ๋ ์ค, ์๋์ฐ, ๋งฅOS ๊ฐ์ ๋จธ์ ์ ์ ๊ณตํ๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ ์ํฌํ๋ก์ฐ๋ค์ ์๋ก์ด ๊ฐ์ ๋จธ์ ๋ด์์ ๋์ํ๋ค. Github๋ ๊ฑฐ๋ํ ์ค์ ์ ์ํด large runner๋ฅผ ์ ๊ณตํ ์๋ ์๋ค.
๋ง์ฝ ์์์ ์ ๊ณตํ๋ OS ์ธ์ ๋ค๋ฅธ ๊ฒ์ ์ฐ๊ณ ์ ํ๊ฑฐ๋, ํน์ ํ๋์จ์ด ์ค์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ง์ Runner๋ฅผ ์ธํ ํ์ฌ ์ฐ๊ฒฐํ ์ ์๋ค.
ํ๋จ์ yaml ํ์ผ์ ๊ธฐ์ค์ผ๋ก ๋ณด์.
name: learn-github-actions
run-name: ${{ github.actor }} is learning GitHub Actions
on: [push]
jobs:
check-bats-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '14'
- run: npm install -g bats
- run: bats -v
-
name
(Optional)- Github Action ํญ์์ ๋ณด์ฌ์ง ์ํฌํ๋ก์ฐ ์ด๋ฆ
-
run-name
(Optional)- Github Action ํญ์์ ๋ณด์ฌ์ง ์ํฌํ๋ก์ฐ Run ์ด๋ฆ
-
on
- ์ํฌํ๋ก์ฐ๋ฅผ ์ํ Trigger(Event)๋ฅผ ์ ์ํ๋ค.
- ์์ ์์์ ๊ฒฝ์ฐ
push
๊ฐ ๋ฐ์ํ ๋๋ง๋ค, PR์ Mergeํ ๋๋ง๋ค ์ํฌํ๋ก์ฐ๊ฐ ์คํ๋๋ค. ๋ณ๋ค๋ฅธ Branch๋ฅผ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ธ๋์น์ ๋ํ push์ ๋ํด ์ํฌํ๋ก์ฐ๊ฐ ์คํ๋๋ค.
-
jobs
- ํด๋น ์ํฌํ๋ก์ฐ ๋ด์์ ์คํํ Job ๋ชฉ๋ก์ ์ ์ํ๋ค.
-
check-bats-version
(job ๋ช ์นญ)- โcheck-bats-versionโ์ด๋ผ๋ job์ ์ ์ํ๋ค.
- ํ์์ ์ ์๋๋ ๊ฒ๋ค์ ํด๋น job์ property๋ฅผ ์๋ฏธํ๋ค.
-
runs-on
- ์ด๋ค OS์์ ๋์ํ ๊ฒ์ธ์ง ์ ์ํ๋ค.
- https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on ์ฐธ๊ณ
-
steps
- ์ํ Job ๋ด์์ ์คํํ ๋ชจ๋ step๋ค์ ์ ์ํ๋ค. ๊ฐ job๋ค์ ๊ฐ๋ณ action์ด๊ฑฐ๋ ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ปํ๋ค.
-
-use
-
job ๋ด์์ step์ผ๋ก์จ ์ฌ์ฉํ Action์ ์ง์ ํ๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ณธ์ธ์ ๋ ํฌ์งํ ๋ฆฌ์ ์ ์ํ Action์ ์ํฌํ๋ก์ฐ์ฒ๋ผ ์ฌ์ฉํ๊ฑฐ๋, ๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ, ํน์ Docker ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ด์ ์ ์๋ Action์ ์ฌ์ฉํ ์๋ ์๋ค.
-
์ด๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ๋์(๊น์ง๋ ์๋์ง๋ง) ์ฌ์ฉํ Action์ ๋ฒ์ ์ ํจ๊ป ์ ์ด์ผํ๋ค. ๋ฒ์ ์ด ์ ๊ณต๋์ง ์๋๋ค๋ฉด, ์๋ํ์ง ์์ ๋์์ด ๋ฐ์ํ๊ฑฐ๋ ์ํฌํ๋ก์ฐ๊ฐ ๊นจ์ง ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก Version์ Git Ref, SHA, Docker ํ๊ทธ๋ก ์ ์ํ ์ ์๋ค.
steps: # Reference a specific commit - uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675 # Reference the major version of a release - uses: actions/checkout@v3 # Reference a specific version - uses: actions/[email protected] # Reference a branch - uses: actions/checkout@main
-
์ผ๋ถ Action๋ค์
with
ํค์๋๋ฅผ ํตํด ์ ๋ ฅ์ ์๊ตฌํ๊ธฐ๋ ํ๋ค. ์์์- uses: actions/setup-node@v3
๊ฐ ๊ทธ๋ฌํ ๊ฒ์ผ๋ก, ์ด๋ ์ค์นํ node ๋ฒ์ ์ with๋ก ์ ๊ณตํด์ฃผ์ด์ผ๋ง ํ๋ค. -
Action๋ค์ JS File์ด๋ Docker Container ์ด๋ค. Docker๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ ์คํ ํ๊ฒฝ์ ๋ฆฌ๋ ์ค๊ฐ ๋์ด์ผ๋ง ํ๋ค.
-
-
-run
- ์คํํ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ค.
- ์์ธํ ์ฌํญ์ https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions ์ ์ฐธ๊ณ ํ๋ค.
1. Marketplace Action ํ์ฉ
Github์ Workflow Editor ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ฌ์ด๋๋ฐ์ Marketplace์์ ์ก์
์ ๊ฒ์ํ ์ ์๋ค. ์ฌ๊ธฐ์ ์ฐพ์ Action์์ Installation ํ์์ ์ฝ๋๋ฅผ ๋ณต์ฌํ์ฌ ๊ทธ๋๋ก ๋ถ์ฌ๋ฃ์ผ๋ฉด ์ฌ์ฉํ ์ ์๋ค. ๋ค๋ง ํด๋น ๋ฐฉ๋ฒ์ผ๋ก Action์ ์ด์ฉํ ๊ฒฝ์ฐ with
๋ก ์
๋ ฅ์ ๋ฐ๋์ง ๋ฐ๋์ ํ์ธํด์ผ ํ๋ค.
2. ๋์ผ ๋ ํฌ์งํ ๋ฆฌ ๋ด ์ปค์คํ Action ํ์ฉ
๋์ผ ๋ ํฌ์งํ ๋ฆฌ์ ๊ฒฝ์ฐ {owner}/{repo}@{ref}
ํน์ ./path/to/dir
ํ์์ผ๋ก ์์ฑํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ ํ์ผ ๊ตฌ์กฐ๊ฐ ์์ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
|-- hello-world (repository)
| |__ .github
| โโโ workflows
| โโโ my-first-workflow.yml
| โโโ actions
| |__ hello-world-action
| โโโ action.yml
jobs:
build:
runs-on: ubuntu-latest
steps:
# This step checks out a copy of your repository.
- uses: actions/checkout@v3
# This step references the directory that contains the action.
- uses: ./.github/actions/hello-world-action
์ด๋ action.yml
์ ์ก์
์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค. ๋ฌธ๋ฒ์ ๋ค์์ ์ฐธ๊ณ ํ๋ค. ("[Metadata syntax for GitHub Actions](https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions).")
3. ๋ค๋ฅธ ๋ ํฌ์งํ ๋ฆฌ์ ์ปค์คํ Action ํ์ฉ
์ด ๊ฒฝ์ฐ {owner}/{repo}@{ref}
ํ์์ผ๋ก ๊ฐ์ ธ๋ค ์ธ ์ ์๋ค. ์ด๋, Action์ ๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ์ ์ ์ฅ๋ ๊ฒ๋ง ํ์ฉํ ์ ์๋ค.
jobs:
my_first_job:
steps:
- name: My first step
uses: actions/setup-node@v3
4. Docker Hub ์์ ์ปจํ ์ด๋ ์ฐธ์กฐ
๋ง์ฝ Docker Hub์ ๋ฐฐํฌ๋ ๋์ปค ์ปจํ
์ด๋ ์ด๋ฏธ์ง ๋ด์ ์ ์๋ Action์ ํ์ฉํ ๊ฒฝ์ฐ, docker://{image}:{tag}
ํ์์ผ๋ก ์ง์ ํด์ฃผ์ด์ผ ํ๋ค. ๋ณดํต ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ Docker container image์ ์ ํฉ์ฑ์ ๊ฒํ ํด๋ด์ผ ํ๋ค.
jobs:
my_first_job:
steps:
- name: My first step
uses: docker://alpine:3.8
์ข
์ข
Action์ ์
๋ ฅ์ด ํ์ํ๊ฑฐ๋, ์ถ๋ ฅ์ ํด์ผํ ํ์๊ฐ ์๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ Action์ action.yml / action.yaml
ํ์ผ์์ ๋ฌด์์ ํ์๋ก ํ๊ณ , ๋ฌด์์ ์ถ๋ ฅํ๋์ง ์ ์ํ๋ค. ์๋์ ์์๋ file-path
์
๋ ฅ์ ์ ์ํ๋ฉฐ, results-file
์ถ๋ ฅ์ ์ ์ํ๋ค.
name: "Example"
description: "Receives file and generates output"
inputs:
file-path: # id of input
description: "Path to test script"
required: true
default: "test-file.js"
outputs:
results-file: # id of output
description: "Path to results file"
Github Action์๋ ๊ฐ ์ํฌํ๋ก์ฐ๊ฐ ์คํ๋ ๋ ์ฐ์ผ ๊ธฐ๋ณธ ํ๊ฒฝ๋ณ์๊ฐ ์ ๊ณต๋๋ค. ๋ง์ฝ ์ง์ ํ๊ฒฝ๋ณ์๋ฅผ ์ ์ํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, yaml ์ํฌํ๋ก์ฐ ํ์ผ์ ์ด๋ฅผ ์ ์ํ ์ ์๋ค. ํ๊ฒฝ๋ณ์๋ ์ํฌํ๋ก์ฐ ์ ์ญ(env
), ํน์ ํน์ Job(jobs.<job_id>.env
), ํน์ Step(jobs.<job_id>.step[*].env
)์ ๋ํด ์ ์ํ ์ ์๋ค. (dotenv
๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๋ ์ด๋ฅผ ํ์ฉํ ์ ์๋์ง ๊ฒํ ํด๋ณผ ๊ฒ.)
name: Greeting on variable day
on:
workflow_dispatch
env:
DAY_OF_WEEK: Monday
jobs:
greeting_job:
runs-on: ubuntu-latest
env:
Greeting: Hello
steps:
- name: "Say Hello Mona it's Monday"
run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
env:
First_Name: Mona
๋ง์ฝ Job์ด ์์ฑํ file์ ๋ค๋ฅธ Job์์๋ ์ฐ๊ณ ์ ํ๊ฑฐ๋, ๋์ค์ ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์ ๋ค๋ฅธ ๊ณณ์ ์ ์ฅํ๊ณ ์ ํ๋ค๋ฉด, ์ด๋ฅผ GitHub์ Artifacts๋ก ์ ์ฅํ ์ ์๋ค. ์ด๋ ์ฝ๋๋ฅผ ๋น๋/ํ ์คํธํ ๋ ์์ฑ๋ ํ์ผ๋ค์ ์๋ฏธํ๋ค. ๊ฐ ์ํฐํํธ๋ ๋ฐ์ด๋๋ฆฌ/ํจํค์ง ํ์ผ์ผ ์๋ ์๊ณ , ํ ์คํธ ๊ฒฐ๊ณผ์ด๊ฑฐ๋, ์คํฌ๋ฆฐ์ท, ๋๋ ๋ก๊ทธ ํ์ผ์ผ ์ ์๋ค. ์ด๋ค์ ์์ ๋ค์ ์์ฑํ๋, ํน์ ์์ ๋ค์ ์ฌ์ฉํ๋ Job์ด ์กด์ฌํ๋ ์ํฌํ๋ก์ฐ ์คํ๊ณผ ์ฐ๊ด๋์ด์๋ค. ํ๋์ ์คํ์ ์กด์ฌํ๋ ๋ชจ๋ Action๊ณผ ์ํฌํ๋ก์ฐ๋ ํด๋น ์คํ์ ๋ํ Artifact์ ๋ํ ์ฐ๊ธฐ ์ ๊ทผ ๊ถํ์ ๊ฐ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ฒฐ๊ณผ ํ์ผ์ Artifact๋ก ์ ๋ก๋ํ ์ ์๋ค.
jobs:
example-job:
name: Save output
steps:
- shell: bash
run: |
expr 1 + 1 > output.log
- name: Upload output file
uses: actions/upload-artifact@v3
with:
name: output-log-file
path: output.log
Artifact๋ ๋ค์๊ณผ ๊ฐ์ด ์ง์ ํ์ฌ ๋ค์ด๋ก๋ํ ์ ์๋ค. ๋ค๋ง ์ด ๊ฒฝ์ฐ with
ํค์๋๋ก ๋ค์ด๋ก๋ํ Artifact์ ์ด๋ฆ์ ์ง์ ํด์ฃผ์ด์ผ๋ง ํ๋ค. ์๋์ ์์์ ๊ฒฝ์ฐ output-log-file
์ ๋ค์ด๋ก๋ํ๋ค.
jobs:
example-job:
steps:
- name: Download a single artifact
uses: actions/download-artifact@v3
with:
name: output-log-file
์ฃผ์ํ ๊ฒ์, ํ ์คํ ๋จ์ ๋ด์์ ๊ฐ์ Artifact์ ๋ํ ์
๋ก๋์ ๋ค์ด๋ก๋๊ฐ ๋ฐ์ํ๋ค๋ฉด, ๋ค์ด๋ก๋ํ๋ Job์ ์
๋ก๋ํ๋ Job์ ๋ํ ์์กด์ฑ์ ์ ์ํด์ผ๋ง ํ๋ค. ์ด๋ jobs.<job_id>.needs: [Artifact Upload Job Id]
๋ฅผ ํตํด ์ ์ํ๋ค. ([์ฐธ๊ณ ](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds))
๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week1-Day1] ํ ๋น๋ฉ
- [Week1-Day2] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week1-Day3] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week1-Day4] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week1-Day5] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week2-Day1] ์คํ๋ฆฐํธ ๊ณํ ํ์
- [Week2-Day2] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week2-Day3] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week2-Day4] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week3-Day1] ์คํ๋ฆฐํธ ๊ณํ ํ์
- [Week3-Day2] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week3-Day3] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week3-Day4] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week4-Day1] ์คํ๋ฆฐํธ ๊ณํ ํ์
- [Week4-Day2] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week4-Day3] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week4-Day4] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week5-Day1] ์คํ๋ฆฐํธ ๊ณํ ํ์
- [Week5-Day2] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week5-Day3] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week5-Day4] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week6-Day1] ์คํ๋ฆฐํธ ๊ณํ ํ์
- [Week6-Day2] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week6 Day3] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- [Week6 Day4] ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ