Intro
μλ νμΈμ. μμ νμ¬μμ git actionsμ ν΅ν΄ CI/CD λ₯Ό ꡬμΆνκ³ μμ΅λλ€. git actions μ΄ λ¬΄μμ΄κ³ , ꡬμ±μμ λ° workflows μν¬νλ‘ νμΌ μμ μ λν΄ μ λ¦¬ν΄ λμΌλ©΄ μ’μ κ² κ°μ μ΄λ² μκ°μλ Github Actions μ λν΄ μμλ³΄λ €κ³ ν΄μ.
What is a Git Actions?
GitHub Actionsλ build, test, deployment pipeline μ μλνν μ μλ CI/CD(μ°μ ν΅ν© λ° μ§μμ μΈ μ
λ°μ΄νΈ) νλ«νΌμ
λλ€. repositoryμ λν λͺ¨λ pull request μ build λ° testνκ±°λ merged pull requests μ νλ‘λμ
μ λ°°ν¬νλ μν¬νλ‘λ₯Ό λ§λ€ μ μμ΅λλ€.
GitHub Actionsμ κ΅¬μ± μμ
pull request μ΄ μ΄λ¦¬κ±°λ μ΄μκ° μμ±λλ κ²κ³Ό κ°μ βeventβκ° repositoryμμ λ°μν λ νΈλ¦¬κ±°λλλ‘ GitHub Actions βμν¬νλ‘βλ₯Ό ꡬμ±ν μ μμ΅λλ€. μν¬νλ‘λ μμ°¨μ λλ λ³λ ¬λ‘ μ€νλ μ μλ βμμ βμ νλ μ΄μ ν¬ν¨ν©λλ€.
Workflows
μν¬νλ‘(workflows) λ νλ μ΄μμ μμ μ μ€ννλ κ΅¬μ± κ°λ₯ν μλνλ νλ‘μΈμ€μ λλ€. μν¬νλ‘λ repositoryμ μ²΄ν¬ μΈλ YAML νμΌμμ μ μλλ©°, repositoryμ μ΄λ²€νΈλ‘ νΈλ¦¬κ±°λ λ μ€νλκ±°λ μλμΌλ‘ λλ μ μλ μΌμ μ λ°λΌ νΈλ¦¬κ±°λ μ μμ΅λλ€. repositoryμ .github/workflows λλ ν°λ¦¬μ μ μλλ©° repositoryμλ μ¬λ¬ μν¬νλ‘κ° μμ μ μμΌλ©°, κ° μν¬νλ‘λ λ€λ₯Έ μμ μΈνΈλ₯Ό μνν μ μμ΅λλ€. μλ₯Ό λ€μ΄ pull requestμ λΉλ λ° ν μ€νΈνλ μν¬νλ‘, 릴리μ€κ° μμ±λ λλ§λ€ μ ν리μΌμ΄μ μ λ°°ν¬νλ μν¬νλ‘ λ±μ΄ μμ μ μμ΅λλ€.
Events
μ΄λ²€νΈλ μν¬νλ‘ μ€νμ νΈλ¦¬κ±°νλ repositoryμ νΉμ νλμ λλ€. μλ₯Ό λ€μ΄ repositoryμ 컀λ°μ νΈμν λ GitHubμμ νλμ΄ μμλ μ μμ΅λλ€. μΌμ μ λ°λΌ μλμΌλ‘ μν¬νλ‘ μ€νμ νΈλ¦¬κ±°ν μλ μμ΅λλ€.
Jobs
Jobs μ λμΌν μ€νκΈ°μμ μ€νλλ μν¬νλ‘μ βλ¨κ³β μ§ν©μ
λλ€. κ° λ¨κ³λ μ€νλλ μ
Έ μ€ν¬λ¦½νΈ λλ μ€νλλ βJobsβμ
λ
\βActionsβμ 볡μ‘νμ§λ§ μμ£Ό λ°λ³΅λλ νμ€ν¬λ₯Ό μννλ GitHub Actions νλ«νΌμ© μ¬μ©μ μ§μ μ ν리μΌμ΄μ
μ
λλ€.
Action
Actions μ μ¬μ©νμ¬ μν¬νλ‘ νμΌμ μμ±νλ λ°λ³΅ μ½λμ μμ μ€μΌ μ μμ΅λλ€. μμ
μ GitHubμμ git 리ν¬μ§ν 리λ₯Ό ννκ±°λ, λΉλ νκ²½μ λ§λ λꡬ 체μΈμ μ€μ νκ±°λ, cloud provider μ λν μΈμ¦μ μ€μ ν μ μμ΅λλ€.
Runners
runnerλ νΈλ¦¬κ±°λ λ μν¬νλ‘λ₯Ό μ€ννλ μλ²μ λλ€. κ° μ€νκΈ°λ ν λ²μ νλμ μμ μ μ€νν μ μμ΅λλ€. GitHubμ(λ) μν¬νλ‘λ₯Ό μ€νν Ubuntu Linux, Microsoft Windows, macOS μ€νκΈ°λ₯Ό μ 곡ν©λλ€.
Create an example workflow
1. repository μμ μ컀νλ‘ νμΌμ μ μ₯ν .github/workflows/ λλ ν 리λ₯Ό λ§λ€μ΄μΌ ν©λλ€.
2. .github/workflows/ λλ ν°λ¦¬μμ github-actions.yml μ΄λΌλ μ νμΌμ λ§λ€κ³ λ€μ μ½λλ₯Ό μΆκ°ν©λλ€.
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
3. λ³κ²½ λ΄μ©μ 컀λ°νκ³ GitHub 리ν¬μ§ν 리μ νΈμν©λλ€.
μ°Έκ³ λ‘, μ νμΌμ μμ μΌ λΏμ
λλ€. μμλ‘ SpringBoot + java 11 version κ°λ°νκ²½μμ workflow νμΌ μμ±μ ν΄λΉ μλ° λ²μ μ λͺ
μν΄μ£Όλ©΄ λ©λλ€.
Understanding the workflow file
name: learn-github-actions
Optional - github repositoryμ Actions νμ νμλλ μ컀νλ‘μ μ΄λ¦μ
λλ€.
run-name: ${{ github.actor }} is learning GitHub Actions
Optional - μν¬νλ‘μμ μμ±λ μν¬νλ‘ μ€νμ μ΄λ¦μΌλ‘, 리ν¬μ§ν 리μ "Actions" νμ μλ μν¬νλ‘ μ€ν λͺ©λ‘μ νμλ©λλ€.
on: [push]
μν¬νλ‘μ νΈλ¦¬κ±°λ₯Ό μ§μ ν©λλ€. μ΄ μμ μμλ push μ΄λ²€νΈλ₯Ό μ¬μ©νλ―λ‘ λκ΅°κ°κ° repositoryμ λ³κ²½ λ΄μ©μ νΈμνκ±°λ pull request μ λ³ν©ν λλ§λ€ μν¬νλ‘ μ€νμ΄ νΈλ¦¬κ±°λ©λλ€.
jobs:
github-actions μν¬νλ‘μμ μ€νλλ λͺ¨λ μμ μ κ·Έλ£Ήν ν΄μ€λλ€.
check-bats-version:
check-bats-versionμ΄λΌλ μμ μ μ μν©λλ€.
runs-on: ubuntu-latest
Ubuntu Linux μ μ΅μ λ²μ μμ μ€νλλλ‘ job μ ꡬμ±ν©λλ€. μ¦, GitHubμμ νΈμ€νΈλ μ κ°μ λ¨Έμ μμ μμ μ΄ μ€νλ©λλ€.
steps:
check-bats-version μμ μμ μ€νλλ λͺ¨λ λ¨κ³λ₯Ό κ·Έλ£Ήνν©λλ€. μ΄ μΉμ μλμ μ€μ²©λ κ° νλͺ©μ λ³λμ μμ λλ shell script μ λλ€.
- uses: actions/checkout@v3
uses ν€μλλ μ΄ λ¨κ³μμ actions/checkout μμ μ v3λ₯Ό μ€ννλλ‘ μ§μ ν©λλ€. μ΄ μμ μ repositoryλ₯Ό μ€νκΈ°λ‘ μ²΄ν¬ μμνμ¬ μ€ν¬λ¦½νΈ λλ μ½λμ λν κΈ°ν μμ (μ: λΉλ λ° ν μ€νΈ λꡬ)μ μ€νν μ μλλ‘ ν©λλ€. μν¬νλ‘κ° repositoryμ μ½λμ λν΄ μ€νλ λλ§λ€ μ²΄ν¬ μμ μμ μ μ¬μ©ν΄μΌ ν©λλ€.
- uses: actions/setup-node@v3
with:
node-version: '14'
μ΄ λ¨κ³μμλ actions/setup-node@v3 μμ μ μ¬μ©νμ¬ μ§μ λ λ²μ μ Node.jsλ₯Ό μ€μΉν©λλ€(μ΄ μμ μμλ v14 μ¬μ©). μ΄λ κ² νλ©΄ node λ° npm λͺ λ Ήμ΄ λͺ¨λ PATHμ λ°°μΉλ©λλ€.
- run: npm install -g bats
run ν€μλλ μ€νκΈ°μμ λͺ λ Ήμ μ€ννλλ‘ μμ μ μ§μν©λλ€. μ΄ μμ μμλ npmμ μ¬μ©νμ¬ bats μννΈμ¨μ΄ ν μ€νΈ ν¨ν€μ§λ₯Ό μ€μΉν©λλ€.
- run: bats -v
μ΅μ’
μ μΌλ‘, μννΈμ¨μ΄ λ²μ μ μΆλ ₯νλ λ§€κ° λ³μμ ν¨κ» bats λͺ
λ Ήμ μ€νν©λλ€.
Conclusion
μ΄μ GitHub Actionsμ΄ λ¬΄μμ΄κ³ , ꡬμ±μμ λ° Workflows νμΌ μμ μ΄ν΄λ΄€μ΅λλ€. μ²μμ 보면 λ―μ€μ΄μ μ΄λ €μλ³΄μΌ μ μλλ°μ, νλ νλ λ»μ νμΈνλ©΄ 그리 μ΄λ ΅μ§ μμ κ°λ μΈ κ² κ°μ΅λλ€ :)
https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions