CICD
CICD
cicdλ 무μμΈκ° - https://www.redhat.com/ko/topics/devops/what-is-ci-cd
μ§μμ ν΅ν©μ΄λ 무μμ λκΉ? - https://aws.amazon.com/ko/devops/continuous-integration/
μ§μμ μ λ¬μ΄λ 무μμ λκΉ? - https://aws.amazon.com/ko/devops/continuous-delivery/
μ§μμ ν΅ν©μ΄λ? - https://www.ibm.com/kr-ko/topics/continuous-integration
μ§μμ ν΅ν©(μ½λ λ³κ²½ -> λΉλ -> ν μ€νΈ -> μ½λ λ³ν©) -> μ§μμ μ 곡(μλ 릴리μ€) -> μ§μμ λ°°ν¬(μλ λ°°ν¬)
μ§μμ ν΅ν©(Continuous Integration)
μ½λ λ³κ²½μ¬νμ κ³΅ν΅ λΈλμΉλ‘ λ³ν©νκΈ° μ©μ΄ νλλ‘ μλννλ λ¨κ³
μ½λμ λ³κ²½ λ΄μ©μ΄ λ°μ -> μλμΌλ‘ λΉλ λ° ν μ€νΈλ₯Ό νΈλ¦¬κ±° -> μλ£μ μ½λ ν΅
"merge day"κ° νμ μμ΄μ§μΌλ‘ μΈν΄ λ³ν©μ μν μκ° μ μ½
μ§μμ μ 곡(Continuous Delivery)
CIλ₯Ό κ±°μΉ μ½λλ₯Ό μλμΌλ‘ 리ν¬μ§ν 리μ 릴리μ€(μ λ‘λ)νλ λ¨κ³
μ΄ νλ‘μΈμ€κ° λλλ©΄ μ μνκ² νλ‘λμ λ°°ν¬ν μ€λΉκ° μλ£
μ§μμ λ°°ν¬(Continious Deployment)
μ§μμ μ 곡μμ ν λ¨κ³ λ λμκ° μ½λ λ³κ²½ μ¬ν λ°μ μ νλ‘λμ λ°°ν¬κΉμ§ μλμΌλ‘ μν
λ λΉ λ₯Έ μννΈμ¨μ΄ μΆμ λ° νΌλλ°± λ°μ
Github Actions
Github Actionsλ Githubμ Repositoryμμ λΉλ, ν μ€νΈ λ° λ°°ν¬ νμ΄νλΌμΈμ μλνν μ μλ CI/CD νλ«νΌ
μν¬νλ‘μ° μ€νν°: https://github.com/actions/starter-workflows
νμ μ€ν¬λ¦½νΈ Actions: https://github.com/actions/typescript-action
κ΅¬μ± μμ
μν¬νλ‘(workflows)
YAMLμ μ¬μ©νμ¬ μ μλκ³ , νλ μ΄μμ μμ μΌλ‘ ꡬμ±λ κ΅¬μ± κ°λ₯ν μλν νλ‘μΈμ€
μν¬νλ‘λ μμ°¨μ μΌλ‘ λλ λ³λ ¬μ μΌλ‘ μ€νλ μ μλ€.
κ° μμ μ κ°μ λ¨Έμ λλ 컨ν μ΄λ λ΄λΆμμ μ€νλλ€.
[!NOTE]
μν¬ νλ‘ νμΌμ 리ν¬μ§ν 리μ
.github/workflows
λλ ν°λ¦¬ λ΄μ.yml
,.yaml
νμΌλ‘ μ μ₯λμ΄μΌ νλ€μλ‘ λ€λ₯Έ μμ μ μν μ¬λ¬ κ°μ μν¬νλ‘ νμΌμ΄ μ‘΄μ¬ν μ μλ€(λΉλ μν¬νλ‘, ν μ€νΈ μν¬νλ‘, λ°°ν¬ μν¬νλ‘ λ±)
μ΄λ²€νΈ(events)
μν¬νλ‘λ₯Ό μ€ννλλ‘ νΈλ¦¬κ±°νλ νΉμ νλ. 리ν¬μ§ν 리 λ΄μ νλ, REST APIλ₯Ό ν΅ν νλμ΄κ±°λ cronμ ν΅ν μΌμ μμ½ λ±μ ν μ μλ€
μ΄λ²€νΈ | μ΄λ²€νΈ μ€λͺ |
---|---|
branch_protection_rule | λΆκΈ° λ³΄νΈ κ·μΉμ΄ λ³κ²½λ λ |
check_run | κ²μ¬ μ€νκ³Ό κ΄λ ¨λ μμ μ΄ λ°μλ λ |
check_suite | κ²μ¬ λꡬ λͺ¨μ μμ μ΄ λ°μν |
create | Git μ°Έμ‘°(Git λΆκΈ° λλ νκ·Έ)λ₯Ό λ§λ€ λ |
delete | Git μ°Έμ‘°(Git λΆκΈ° λλ νκ·Έ)λ₯Ό μμ ν λ |
deployment | λ°°ν¬λ₯Ό λ§λ€ λ |
deployment_status | νμ¬μμ λ°°ν¬ μνλ₯Ό μ 곡ν λ |
discussion | ν λ‘ μ΄ λ§λ€μ΄μ§κ±°λ μμ λ λ |
discussion_comment | ν λ‘ μ λκΈμ΄ λ§λ€μ΄μ§κ±°λ μμ λ λ |
fork | 리ν¬μ§ν 리λ₯Ό ν¬ν¬ν λ |
gollum | Wiki νμ΄μ§λ₯Ό λ§λ€κ±°λ μ λ°μ΄νΈν λ |
issue_comment | λ¬Έμ λλ λμ΄μ€κΈ° μμ² μ€λͺ μ΄ μμ±, νΈμ§ λλ μμ λ λ |
issues | λ¬Έμ κ° λ§λ€μ΄μ§κ±°λ μμ λ λ |
label | λ μ΄λΈμ΄ λ§λ€μ΄μ§κ±°λ μμ λ λ |
merge_group | λμ΄μ€κΈ° μμ²μ΄ λ³ν© νμ μΆκ°λ λ |
milestone | λ§μΌμ€ν€μ΄ λ§λ€μ΄μ§κ±°λ μμ λ λ |
page_build | GitHub Pagesμ κ²μ μλ³ΈμΈ λΆκΈ°λ‘ νΈμν λ |
project | νλ‘μ νΈ(ν΄λμ)μ(λ₯Ό) μμ±νκ±°λ μμ ν λ |
project_card | νλ‘μ νΈ(ν΄λμ)μμ μΉ΄λλ₯Ό μμ±νκ±°λ μμ ν λ |
project_column | νλ‘μ νΈ(ν΄λμ)μμ μ΄μ μμ±νκ±°λ μμ ν λ |
public | κ³΅κ° μνκ° νλΌμ΄λΉμμ νΌλΈλ¦μΌλ‘ λ³κ²½λ λ |
pull_request | λμ΄μ€κΈ° μμ²μ λν μμ μ΄ λ°μν λ |
pull_request_comment(issue_comment μ¬μ©) | (λμ΄μ€κΈ° μμ²μ diffκ° μλ) λμ΄μ€κΈ° μμ²μ λν μ£Όμμ΄ μμ±, νΈμ§ λλ μμ λ λ |
pull_request_review | λμ΄μ€κΈ° μμ² κ²ν κ° μ μΆλκ±°λ νΈμ§λκ±°λ ν΄μ λ λ |
pull_request_review_comment | λμ΄μ€κΈ° μμ² κ²ν μ£Όμμ΄ μμ λ λ |
pull_request_target | λμ΄μ€κΈ° μμ²μ λν μμ μ΄ λ°μν λ |
push | μ»€λ° λλ νκ·Έλ₯Ό νΈμνκ±°λ ν νλ¦Ώμμ 리ν¬μ§ν 리λ₯Ό λ§λ€ λ |
registry_package | 리ν¬μ§ν 리μμ GitHub Packagesμ κ΄λ ¨λ μμ μ΄ λ°μν λ |
release | λ¦΄λ¦¬μ€ μμ μ΄ λ°μν λ |
repository_dispatch | GitHub μΈλΆμμ λ°μνλ μμ μ λν μν¬νλ‘λ₯Ό νΈλ¦¬κ±°νλ €λ κ²½μ° |
schedule | POSIX cron ꡬ문μ μ¬μ©νμ¬ νΉμ UTC μκ°μ μν¬νλ‘λ₯Ό μ€ννλλ‘ μμ½ |
status | Git 컀λ°μ μνκ° λ³κ²½λ λ |
watch | μν¬νλ‘μ 리ν¬μ§ν λ¦¬κ° λ³νλ‘ νμλλ©΄ |
workflow_call | λ€λ₯Έ μν¬νλ‘μμ μν¬νλ‘λ₯Ό νΈμΆν μ μμμ λνλ΄λ λ° μ¬μ© |
workflow_dispatch | μν¬νλ‘μ°κ° μλμΌλ‘ νΈλ¦¬κ±°λλλ‘ νκΈ°μν΄ μ¬μ© |
workflow_run | μν¬νλ‘ μ€νμ μμ²νκ±°λ μλ£ν λ λ°μ |
μμ
(jobs)
λμΌν λ¬λμμ μ€νλλ μν¬νλ‘μ μΌλ ¨μ λ¨κ³λ‘
κ° λ¨κ³λ shell script
λλ action
μ΄λ©° μμλλ‘ μ€νλλ€
λ¨κ³(step) κ°μλ μλ‘ μ’ μμ μ΄λ©° λ°μ΄ν°λ₯Ό 곡μ ν μ μλ€
λ°λ©΄ μμ
κ°μλ κΈ°λ³Έμ μΌλ‘ μ’
μμ±μ΄ μκ³ , λ³λ ¬λ‘ μ€νλλ€. νΉμ μμ
μ΄ λ€λ₯Έ μμ
μ΄νμ μ€νλμ΄μΌ νλ€λ©΄ needs
λ₯Ό ν΅ν΄ μ’
μμ±μ μ§μ ν΄μΌ νλ€
μ‘μ
(actions)
μμ£Ό λ°λ³΅λλ 볡μ‘ν μμ μ μ¬μ¬μ©νλλ‘ λ§λ Github Actions νλ«νΌ μ μ© μ¬μ©μ μ§μ μ ν리μΌμ΄μ
λ§μΌνλ μ΄μ€ https://github.com/marketplace
μ‘μ μ μμ
Githubμμ Git 리ν¬μ§ν 리κ°μ Έμ€κΈ°(checkout)
λΉλλ₯Ό μν λꡬ μ€μ (setup)
ν΄λΌμ°λ 곡κΈμμ λν μΈμ¦
λ¬λ(runner)
μν¬νλ‘λ₯Ό μ€ννλ μλ². κ° μλ²λ ν λ²μ νλμ μμ μ μ€ν
name
name
μν¬νλ‘μ μ΄λ¦μΌλ‘ Github 리ν¬μ§ν 리μ "Actions" νμμ νμν λ μ¬μ©
μλ΅νλ©΄ μν¬νλ‘ νμΌ κ²½λ‘λ₯Ό μ¬μ©νμ¬ νμ
run-name
run-name
μν¬νλ‘μμ μμ±λ μ€νμ λν μ΄λ¦
μλ΅νλ©΄ μ€νμ λν μ΄λ²€νΈ μ λ³΄λ‘ μ€μ
on
on
μν¬νλ‘λ₯Ό μλμΌλ‘ νΈλ¦¬κ±°νκΈ° μν μ΄λ²€νΈλ₯Ό μ μ
μ΄λ²€νΈ μ μνκΈ°
μκ° μ€μ νκΈ°
νΉμ νμΌ, νκ·Έ, λΆκΈ°μμλ§ μν¬νλ‘κ° μ€νλλλ‘ μ ννκΈ°
https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows
jobs
jobs
μν¬νλ‘ μ€νμ λ³λ ¬λ‘ μ€νλλ νλ μ΄μμ jobs
λ‘ κ΅¬μ±
μμ μ νλ μ΄μμ λ¨κ³(steps)λ‘ κ΅¬μ±
jobsλ jobs.<job_id>.runs-on
μμ μ€νλλ€
jobs.<job_id>.needs
μ ν΅ν΄ μμ
μ μμ°¨μ μΌλ‘ μ€ννλλ‘ μμ
μ λν μ’
μμ±μ μ μν μ μλ€
jobs.<job_id>.runs-on
jobs.<job_id>.runs-on
μμ μ μ€νν λ¨Έμ μ νμ μ μ
κΉνλΈ νΈμ€ν λ¬λ, λ ν° λ¬λ, μ체 νΈμ€ν λ¬λ μ€μμ μ¬μ© ν μ μμ
κΉνλΈ νΈμ€ν λ¬λ
ubuntu-latest
windows-latest
macos-latest
Checkout
리ν¬μ§ν 리μ μ½λλ₯Ό κ²μνκ³ μν¬νλ‘μμ 리ν¬μ§ν 리μ μ½ν μΈ μ μ‘μΈμ€ κ°λ₯νλλ‘ μ²΄ν¬ μμ
https://github.com/marketplace/actions/checkout
Nodejs νκ²½ κ΅¬μ± λ° λΉλ
https://github.com/marketplace/actions/setup-node-js-environment
https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
Nodejs νκ²½ κ΅¬μ± λ° λΉλ job
ν
μ€νΈ job
μ¬λ¬ νκ²½ λμ λ³λ ¬ ν
μ€νΈ
λ°°μ΄μ μ¬μ©νμ¬ μ΄μ체μκ³Ό λ²μ μ μ§μ νλ©΄, ν΄λΉνλ νκ²½μ λν΄μ λμμ ν μ€νΈνμ¬ μκ° μ μ½
secrets μ¬μ©
repository -> Settings -> Security -> Actions secrets and variables
https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions
Last updated