๐ฏ
Github Actions๋ฅผ ์ดํดํ ์ ์๋ค.
โ Github Actions
์ํํธ์จ์ด workflow๋ฅผ ์๋ํ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ
ex)
1. ๋ด๊ฐ github์ ์ฝ๋๋ฅผ ์ฌ๋ฆฌ๋ฉด ํน์ ์ํ์ ํ๋๋ก ํ๊ณ ์ถ๋ค.
2. ํด๋น ์ฝ๋๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๋์ํ์ผ๋ฉด ์ข๊ฒ ๋ค. (๋ ์จ, ๋ด์ค ํฌ๋กค๋ง ๋ฑ)
์ด๋ค ์ด๋ฒคํธ(event)๊ฐ ๋ฐ์ํ์ ๋ ํน์ ์์ ์ด ์ผ์ด๋๊ฒ ํ๊ฑฐ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ด๋ค ์์ ๋ค์ ๋ฐ๋ณต ์คํ ๊ฐ๋ฅํ๋ค.
GitHub Actions๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก ์ฝ๋ ์ ์ฅ์์์
์ด๋ ๊ฒ ์ํํธ์จ์ด ํ๋ก์ ํธ์์ ์ง์์ ์ผ๋ก ์ํํด์ผํ๋ ๋ฐ๋ณต ์์ ๋ค์ ์ ๊ณ์์๋ ์์ CI/CD๋ผ๊ณ ๋ง์ด ์ค์ฌ์ ๋ถ๋ฅด๋๋ฐ ์ฌ๋์ด ๋งค๋ฒ ์ง์ ํ๊ธฐ์๋ ๋นํจ์จ์ ์ธ๋ฐ๋ค๊ฐ ์ค์ํ ์ํ๋ ์๊ธฐ ๋๋ฌธ์ GitHub Actions๊ณผ ๊ฐ์ ๊ฒ๋ค๋ก ์๋ํ์ํค๋ ๊ฒ์ด ์ ๋ฆฌํ๋ค.
GitHub Actions๋ ๊ธฐ์กด CI/CD ์๋น์ค ๋๋น ๊ฐํธํ ์ค์ ๊ณผ ๋์ ์ ๊ทผ์ฑ์ผ๋ก ํนํ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ๋ง์ ํธ์์ ์ป๊ณ ์๋๋ฐ ์์ ์๋ CI/CD๊ฐ DevOps ์์ง๋์ด์ ์ ์ ๋ฌผ๋ก๋ง ์ฌ๊ฒจ์ง๊ณค ํ์๋๋ฐ ์ต๊ทผ์๋ GitHub Actions์ ํตํด์ ์ผ๋ฐ ๊ฐ๋ฐ์๋ค๋ ์ด๋ ต์ง ์๊ฒ CI/CD ์ค์ ์ ์ค์ค๋ก ํ๊ธฐ ์ฌ์์ก๋ค.
์ด๋ ๋ฏ ์ ์ธ๊ณ์ ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ค์ด ์ด๋ฏธ GitHub ๊ณ์ ์ด ์๋ค๊ณ ํด๋ ๊ณผ์ธ์ด ์๋ ์ ๋ฆฌํ ์ํฉ์์, GitHub๊ฐ Microsoft์ ์ธ์๋ ์ดํ ์ผ์ฌ์ฐจ๊ฒ ์ถ์ํ GitHub Actions์ Jenkins, Circle CI, Travis CI์ ๊ฐ์ ๊ธฐ์กด์ ์ ์์ ์๋น์ค๊น์ง๋ ์ํํ๋ ์ค์ด๋ค.
โ Github Actions Example
- ์ฝ๋ ์ ์ฅ์์ Pull Request๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด GitHub Actions๋ฅผ ํตํด ํด๋น ์ฝ๋ ๋ณ๊ฒฝ๋ถ์ ๋ฌธ์ ๊ฐ ์๋์ง ๊ฐ์ข ๊ฒ์ฌ๋ฅผ ์งํ
- ์ด๋ค ์๋ก์ด ์ฝ๋๊ฐ ๋ฉ์ธ(main) ๋ธ๋์น์ ์ ์ (push)๋๋ฉด GitHub Actions๋ฅผ ํตํด ์ํํธ์จ์ด๋ฅผ ๋น๋(build)ํ๊ณ ์์ฉ ์๋ฒ์ ๋ฐฐํฌ(deploy) ๊ฐ๋ฅ
- ํน์ ์๊ฐ์ ํน์ ๋ฐ์ดํฐ ํฌ๋กค๋ง ๊ฐ๋ฅ
โ Workflows
GitHub Actions์์ ๊ฐ์ฅ ์์ ๊ฐ๋ ์ธ ์ํฌํ๋ก์ฐ(Workflow, ์์ ํ๋ฆ)๋ ์๋ํํด๋์ ์ผ๋ จ์ ์์ ๊ณผ์ ์ด๋ค.
.github/workflows ํด๋ ์๋์ ์์นํ YAML ํ์ผ ๋ก ์ค์ ํ๋ฉฐ, ํ๋์ ์ฝ๋ ์ ์ฅ์์๋ ์ฌ๋ฌ ๊ฐ์ ์ํฌํ๋ก์ฐ, ์ฆ ์ฌ๋ฌ ๊ฐ์ YAML ํ์ผ์ ์์ฑ ๊ฐ๋ฅํ๋ค.
์ด๋ ์ํฌํ๋ก์ฐ๋ ์ฝ๋ ์ ์ฅ์ ๋ด์์
Workflow์ ๋ํ์ ์ธ ์
- Test Code value์ ํน์ ๊ฐ์ด ๋ค์ด๊ฐ๋๊ฐ?
- ํน์ ํจ์์ return ๊ฐ์ด ์ด๋ป๊ฒ ๋์ค๋์ง ํ์ธํ๋ TC
- Deploy
- ์๋ฒ์ ์๋ก์ด ๊ธฐ๋ฅ, ๋ฒ์ ๋ฑ์ ๋ฐฐํฌ
- Automation
- ์๋ํํ๊ณ ์ ํ๋ ์คํฌ๋ฆฝํธ ์์ฑ
- ๋ค์ํ ๋ฒ์ ์์ ์คํ๋๋์ง ํ์ธ
- Ubuntu์ ์ต์ ๋ฒ์ ์์ ๋์ํ๋์ง, Python 3.5~3.8 ๋ฒ์ ์์ ๋์ํ๋์ง
main ๋ธ๋์น์ push ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ๋ง๋ค ์ํฌํ๋ก์ฐ ์คํํ๋ ๋ฐฉ๋ฒ
.github/workflows/example.yml
on:
push:
branches:
- main
jobs:
# ...(์๋ต)...
๋งค์ผ ์์ ์ ์ํฌํ๋ก์ฐ ์คํํ๋ ๋ฐฉ๋ฒ
.github/workflows/example.yml
on:
schedule:
- cron: "0 0 * * *"
jobs:
# ...(์๋ต)...
โ Jobs
์ํฌํ๋ก์ฐ๊ฐ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ์ผ์ ํด์ผํ๋์ง ๋ช ์ํ๋ ๊ณณ์ด๋ค.
ํ๋์ ์ฒ๋ฆฌ ๋จ์๋ฅผ ์๋ฏธํ๋ค.
๋ ๋ฆฝ๋ ๊ฐ์ ๋จธ์ (machine) ๋๋ ์ปจํ ์ด๋(container)์์ ๋์๊ฐ๋๋ ์ฌ๋ฌ ๊ฐ์ ์์ ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ ์ด๋ ํ๋์ ์์ ์ ํ์ํ๋ค.
ํ๋์ ์ํฌํ๋ก์ฐ๋ชจ๋ ์์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์์ ์คํ๋๋ฉฐ, ํ์ ์ ์์ ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ์ฌ ์์ ์ด ์คํ๋๋ ์์๋ฅผ ์ ์ดํ ์ ์๋ค.
์์ ์๋ณ์(ID)์ ์์ ์ธ๋ถ ๋ด์ฉ ๊ฐ์ ๋งตํ(mapping) ํํ๋ก ๋ช ์
์์ ์ ์ํฌํ๋ก์ฐ YAML ํ์ผ ๋ด์์ jobs ์์ฑ์ ์ฌ์ฉํ๋ฉฐ์๋ฅผ ๋ค์ด job1, job2, job3์ด๋ผ๋ ์์ ID๋ฅผ ๊ฐ์ง 3๊ฐ์ ์์ ์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์
.github/workflows/example.yml
# ...(์๋ต)...
jobs:
job1:
# job1์ ๋ํ ์ธ๋ถ ๋ด์ฉ
job2:
# job2์ ๋ํ ์ธ๋ถ ๋ด์ฉ
job3:
# job3์ ๋ํ ์ธ๋ถ ๋ด์ฉ
์์ ์ ์ธ๋ถ ๋ด์ฉ์ผ๋ก๋ ์ฌ๋ฌ ๊ฐ์ง ๋ด์ฉ์ ๋ช ์ํ ์ ์๋๋ฐ
runs-on ์์ฑ์ ํตํด ํด๋น ๋ฆฌ๋ ์ค๋ ์๋์ฐ์ฆ์ ๊ฐ์ ์คํ ํ๊ฒฝ์ ์ง์
ํ์๋ก ๋ค์ด๊ฑฐ์ผ ํ๋์๋ฅผ ๋ค์ด, ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ฐ๋ถํฌ์ ์ต์ ์คํ ํ๊ฒฝ์์ ํด๋น ์์ ์ ์คํํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์
.github/workflows/example.yml
# ...(์๋ต)...
jobs:
job1:
runs-on: ubuntu-latest
steps:
# ...(์๋ต)...
โ Steps
์์ ์์๋ฅผ ์ ์ํ๋ ๊ณณ์ด๋ค.
๊ฐ ์์ (job)์ ํ๋ ์ด์์ ๋จ๊ณ(step)๋ก ๋ชจ๋ธ๋งํ๋ค.
๋จ์ํ ์ปค๋งจ๋(command) ํน์ ์คํฌ๋ฆฝํธ(script*๊ฑฐ๋ ์ก์ (action)๊ฐ์ ๋ณต์กํ ๋ช ๋ น์ด๋ค.
์์ ๋จ๊ณ๋run ์์ฑ์ ์ฌ์ฉํ๋ฉฐ, ์ก์ ์ ์ฌ์ฉํ ๋๋ uses ์์ฑ์ ์ฌ์ฉํ๋ค.
์ปค๋งจ๋๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ๋๋
์๋ฅผ ๋ค์ด ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์์ ํ ์คํธ๋ฅผ ๋๋ฆฌ๋ ค๋ฉด
์ฝ๋ ์ ์ฅ์์ ์ฝ๋๋ฅผ ์์ ์คํ ํ๊ฒฝ์ผ๋ก ๋ด๋ ค ๋ฐ๊ณ → ํจํค์ง๋ฅผ ์ค์น → ํ ์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ค.
์ด๋ฌํ 3๋จ๊ณ ์์ ์ ์๋์ ๊ฐ์ด steps ์์ฑ์ ํตํด์ ๋ช ์ ๊ฐ๋ฅํ๋ค.
.github/workflows/example.yml
# ...(์๋ต)...
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm install
- run: npm test
์ํฌํ๋ก์ฐ ํ์ผ ๋ด์์ ์์ ๋จ๊ณ๋ฅผ ๋ช ์ํด์ค ๋๋ ๋ฐ๋์ - ๋ฅผ ๋ถ์ฌ์ผ ํจ
๐ก(YAML ๋ฌธ๋ฒ์์ ์ํ์ค(sequence) ํ์ ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ)
โ Actions
๋ฐ๋ณต ๋จ๊ณ๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ฉ์ดํ๋๋ก ์ ๊ณต๋๋ ์ผ์ข ์ ์์ ๊ณต์ ๋ฉ์ปค๋์ฆ์ด๋ค.
๊ณต๊ฐ ์ฝ๋ ์ ์ฅ์๋ฅผ ํตํด ์ก์ ์ ๊ณต์ ํ๋ฉด GitHub ์์ ๋ชจ๋ ์ฝ๋ ์ ์ฅ์์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
ํ๋์ ์ฝ๋ ์ ์ฅ์ ๋ฒ์ ๋ด์์ ์ฌ๋ฌ ์ํฌํ๋ก์ฐ ๊ฐ์์ ๊ณต์ ๋ฅผ ํ ์ ์์ ๋ฟ๋ง ์๋๋ผ,์ฒดํฌ ์์ ์ก์ (actions/checkout)
GitHub์์ ์ ๊ณตํ๋ ๋ํ์ ์ธ ๊ณต๊ฐ ์ก์ :๋๋ถ๋ถ์ CI/CD ์์ ์ ์ฝ๋ ์ ์ฅ์๋ก ๋ถํฐ ์ฝ๋๋ฅผ ์์ ์คํ ํ๊ฒฝ์ผ๋ก ๋ด๋ ค๋ฐ๋ ๊ฒ์ผ๋ก ์์ → ์ฒดํฌ ์์ ์ก์ ์ ์์ฒญ๋๊ฒ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
๋ฟ๋ง์๋๋ผ GitHub Marketplace์์๋ ์๋ง์ ๋ฒค๋(vendor)๊ฐ ๊ณต๊ฐํด๋์ ๋ค์ํ ์ก์ ์ด ์กด์ฌํ๋ค.
์ฆ, ์ด๋ฌํ ์ก์ ์ ์ค์ฌ์ผ๋ก ํ๋์ ํฐ ์ปค๋ฎค๋ํฐ๊ฐ ํ์ฑ์ด ๋๊ณ ๋ ๋ง์ ์ฌ์ฉ์์ ๋ฒค๋๊ฐ GitHub Actions์ผ๋ก ๋ชฐ๋ ค๋๋ ์ ์ํ์ด ๋ฐ์ํ๋ค.
[์ถ์ฒ]
https://www.invicti.com/support/integrating-invicti-enterprise-github-actions/
https://zzsza.github.io/development/2020/06/06/github-action/