2023. 10. 30. 20:05ใSystem ์์ ์ค/DevOps
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ ๋ชฉ์ฐจ
โ
[CI/CD] Jenkins์ Gitea ์ฐ๋
โ
[CI/CD] Jenkins์ Gitlab ์ฐ๋
โ
[CI/CD] Jenkins Trigger ์ ๋ณด Discord๋ก ๋ณด๋ด๊ธฐ
โ
[CI/CD] ์ ์ ์ฝ๋ ๋ถ์ ํด SonarQube์ Jenkins ์ฐ๋
โ
[CI/CD] SonarQube๋ฅผ ํตํด Code Convention ์ ์ฉ
โ
[DevOps] JAVA Gradle JaCoCo (Code coverage) ์ค์ ํ๊ธฐ
โ
[DevOps] JAVA Gradle JaCoCo (Code coverage) ์ค์ ํ๊ธฐ (์ถ๊ฐ)
โ
[CI/CD] Jenkins + Docker๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ - โ Application Linuxt(Ubuntu)์ SSH๋ฅผ ์ด์ฉํ ํ์ผ ์ ์ก
โ
[CI/CD] Jenkins + Docker๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ - โก Create Docker Image And BackUp
โ
[CI/CD] Jenkins + Docker๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ - โข Application Server Docker Job โ Application ๋์ปค ์กด์ฌ ์ฌ๋ถ ํ์ธ)
โ
[CI/CD] Jenkins + Docker๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ - โข Application Server Docker Job (โก Application Docker Run)
โ
[CI/CD] Jenkins + Docker๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ - โข Application Server Docker Job(โข Application Docker Health Check)
โ
[CI/CD] Jenkins + Docker๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ - โฃ NGINX Server Docker Job (โ NGINX ๊ฐ ์ข
์ค์ )
โ
[CI/CD] Jenkins + Docker๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ - โฃ NGINX Server Docker Job (โก NGINX Docker ์กด์ฌ ์ฌ๋ถ ํ์ธ)
โ
[CI/CD] Jenkins + Docker๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ -โฃNGINX Server Docker Job(โข NGINX Docker Run & Health Check)
โ
[CI/CD] Jenkins + Docker๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ - โฃ NGINX Server Docker Job (โข NGINX ์ฌ ์ค์ )
๐ค ๋ด๊ฐ ๋ง๋ ๋ฌธ์
โ๏ธ [Jenkins] java.lang.OutOfMemoryError: Java heap space
๐ ๊ฒ์ํ ๋ง๋ค๊ธฐ - ์ญ์
๐ฝ ๊ฐ์
๐ฆ ์๊ฐ
์๋ ํ์ธ์? ์ด ์ ์ ์ฃผ๋๋ Jenkins์ Gitea๋ฅผ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ํตํด CI/CD๋ฅผ ํ ์ ์๋๋ก ๊ตฌ์ฑํด ๋ณด์์ด์.
ํ.์ง.๋ง ์ค๋ฌด์์ Gitea๋ฅผ ์ฐ๋ ๊ณณ์ ๋ง์ง ์์ ๊ฒ์ผ๋ก ์ฌ๋ฃ๋๊ณ , ํ์ฌ ๋ณด์ ํ ์๋ฒ์ ์์์ด ๋๋ํด์ Gitlab-CE๋ฅผ ๋ด๋ถ ์๋ฒ์ ์ค์นํ๊ณ , Jenkins์ ์ฐ๋ํด ๋ณด๋ ค๊ณ ํด์.
Gitlab์ ์ด๋ ๊ฒ ์ค์นํ์ด์.
๐ฝ Jenkins & GitLab ์ด๊ธฐ ๊ตฌ์ฑ
๐ฆ Gitlab SSH ์ฐ๊ฒฐ ๊ตฌ์ฑ
์ต์ด Client์์ Gitlab์ ์ฐ๊ฒฐํ ๋, SSH๋ฅผ ์ด์ฉํ Key ๊ฐ์ผ๋ก ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ์์ ์ ํด ๋ณผ๊ฒ์.
์ฃผ๋๋ ์์ ๊ฐ์ด ๋์ปค๋ฅผ ์ด์ฉํด์ ์ ํจ์ค๋ฅผ ์ค์นํด ์ฃผ์์ด์. ๋์ปค๋ฅผ ์ด์ฉํ ์ ํจ์ค ์ค์น ๋ฐฉ๋ฒ์ ์ด๋ ๊ฒ ํ์ด์.
์ ํจ์ค์์ Gitlab์ ์ฐ๊ฒฐ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ปจํ
์ด๋์ ์ ์ํด์ ์์
ํด ์ค๊ฒ์.
์ ๋ช
๋ น์ด๋ Container์ ๋ช
๋ น์ด๋ฅผ ์ ๋ฌํ๋๋ฐ, /bin/bash ๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์ ๋ฌํ์ฌ
Shell์ ์ป์ด์ค๋๋ก ํด ์ฃผ๋ ๋ช
๋ น์ด์์.
git Package๋ฅผ ์ค์นํ ๊ฑด๋ฐ, ์ค์นํ๊ธฐ ์ ์จ ์์ ๊ฐ์ด ํจํค์ง๋ฅผ ์ต์ ํ ํด ์ฃผ์์ด์.
์ฃผ๋๋ ์ด๋ฏธ ์ค์น๊ฐ ๋์ด ์์ผ๋, ์ค์น๊ฐ ๋์ด์์ง ์์ ์ ์์ผ๋ ์์ ๊ฐ์ด ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด ์ฃผ์์ด์.
์ต์ด ์์ ๊ฐ์ด ๋ค๋ฅธ ์๋น์ค์์ ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์๋ ๊ณ์ ์ ๋ง๋ค์ด ์ฃผ์์ด์.
์์ ๊ฐ์ด SSH ์ ์์ฉ ์๋ช Key ์์ ์์ฑํด ์ฃผ์์ด์.
- Enter file in which to save the key (/root/.ssh/id_ed25519): ์ด ๋ถ๋ถ์ Key ํ์ผ์ด ์ ์ฅ๋ ์์น๋ฅผ ๋ฌป๋ ๊ณณ์ผ๋ก Default Path๋ ํด๋น ๊ณ์ Home Directory ๋ฐ์ .ssh ์
๋๋ค.
- Enter passphrase (empty for no passphrase): ์ด ๋ถ๋ถ์ ํด๋น Key ํ์ผ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ๋ ๋ถ๋ถ์ด์์. ๋ง์ฝ ์
๋ ฅํ๋ค๋ฉด ์ฐ๋ ์ ๋ฐ๋์ ํ์ํ๋ ์ ์ด๋๋๊ฒ ์ข๊ณ , ํ์์๋ค๋ฉด ๊ทธ๋ฅ ์ํฐ๋ฅผ ๋๋ฅด๊ณ ๋์ด๊ฐ๋ฉด ๋ฉ๋๋ค.
- Enter same passphrase again: 2๋ฒ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ๋ค๋ฉด ๋ค์ ํ๋ฒ ํ์ธํ๊ธฐ ์ํ ๋ถ๋ถ์ด์์.
๋ง๋ ํค ์์ ๋ํด ๊ถํ์ ์์ ํด ์ฃผ์์ด์. jenkins_admin ์ด๋ผ๋ ์ฌ์ฉ์๋ง ์ฝ๊ธฐ, ์ฐ์, ์คํ ๊ถํ์ ์ฃผ์์ด์.
์ด๋ ๊ฒ cat ๋ช
๋ น์ด๋ฅผ ํตํด ๋ง๋ค์ด์ง ํค ์ ์ค ๊ณต๊ฐํค๋ฅผ ํ์ธํ ์ ์๋๋ฐ,
์ด ๊ณต๊ฐํค๋ฅผ gitlab์ ๋ฑ๋ก ์์ผ ์ฃผ์ ์ํด์ ๋ชจ๋ ๋ถ๋ถ์ ๋ค ๋ณต์ฌํด ์ค๊ฒ์.
๐ฆ Gitlab ์ฐ๊ฒฐ
gitlab์ ์ ์ํ ๋ค ์์ ๊ฐ์ด ํ๋กํ ํธ์ง(Edit profile)์ ๋๋ฌ ์ค๋๋ค.
SSH ํค(SSH Keys)๋ฅผ ๋๋ฌ ์ค๋๋ค.
์ฌ๊ธฐ์ ์ ํค ์ถ๊ฐ๋ฅผ ๋๋ฌ ํค๋ฅผ ์ถ๊ฐํด ์ค๊ฒ์.
์์ ๊ฐ์ด ์ ํจ์ค ์๋ฒ์์ ๋ง๋ ๊ณต๊ฐํค๋ฅผ ๋ถํ ๋ฃ์ด์ฃผ๋ฉด ์๋์ผ๋ก
Title Filed์ Email ์ฃผ์๊ฐ ๋ค์ด๊ฐ๋ ๊ฑธ ํ์ธํ ์ ์์ด์.
์ด ๋ถ๋ถ์ ์์๋ก ์์ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋๋ ์๋์ฒ๋ผ ๋ณ๊ฒฝํด ์ฃผ์์ด์.
๋ง๋ฃ์ผ์ ๊ฒฝ์ฐ ํด๋น Key๋ฅผ ์ด์ฉํ ์ ์ ๋ง๋ฃ์ผ์ ์ค์ ํด ์ฃผ๋๊ฑด๋ฐ, ์ฃผ๋๋ ๊ณต๋์ผ๋ก ๋์ด ๋ง๋ฃ๋์ง ์๊ฒ ํด ์ค๊ฑฐ์์.
์ฌ๊ธฐ๊น์ง ๋์๋ค๋ฉด ํค ์ถ๊ฐ(Add key)๋ฅผ ๋๋ฌ์ค๋๋ค.
์์ ๊ฐ์ด ํค ๋ฑ๋ก์ ์ฑ๊ณตํ์์ด์.
๐ฆ Jenkins Plugin
์ด๋ฒ์๋ Jenkins(์ ํจ์ค)์์ ํ์ํ Plugin(ํ๋ฌ๊ทธ์ธ)์ ์ค์นํด๋ณด๋๋ก ํ ๊ฒ์.
์์ ๊ฐ์ด ํ๋ฌ๊ทธ์ธ ํญ์ผ๋ก ์ด๋ํด ์ค๊ฒ์.
์ ์ฌ์ง์ฒ๋ผ Git plugins๋ฅผ ์ค์นํด ์ฃผ์ด์ผ ํ๋๋ฐ, ์ฃผ๋๋ ์ด๋ฏธ ์ค์น๊ฐ ๋์ด ์์ด์.
๊ทธ๋ฆฌ๊ณ gitlab ํ๋ฌ๊ทธ์ธ๋ ์ค์นํด ์ค๋๋ค.
ํ๋ฌ๊ทธ์ธ ์ค์น๊ฐ ์๋ฃ๋๋ฉด ์ฌ๊ธฐ๋์ ํด์ฃผ์ด์ผ ํด์.
์ด๋ฐ์์ผ๋ก ํด์ ์๋ ํ๋ฌ๊ทธ์ธ๋ค์ ์ค์นํด ์ค๊ฒ์.
jenkins lts ์ค์น์ ์ค์น๋์ด ์๋ ํ๋ก๊ทธ์ธ: git plugin, Gradle Plugin
์ค์น ํ์ ํ๋ฌ๊ทธ์ธ: GitLab, GitLab Brtanch Source Generic Webhook Trigger, Post build task, Docker, Docker Commons, Docker Pipeline, Docker API, SSH Agent, Multibranch Scan Webhook Trigger
๐ฆ GitLab Personal Access Token ๋ฐ๊ธ
์์ ๊ฐ์ด ํ๋กํ ์์ด์ฝ์ ํด๋ฆญํ๊ณ , ํ๊ฒฝ ์ค์ ์ผ๋ก ๋ค์ด๊ฐ ์ค๋๋ค.
์์ ๊ฐ์ด ์๋ก์ด ํ ํฐ์ ๋ฐ๊ธ ๋ฐ์ ์ค๊ฒ์.
์์ ๊ฐ์ด ํ ํฐ ์ด๋ฆ์ ์ง์ ํ๊ณ , ํด๋น ํ ํฐ์ ๋ง๋ฃ์ผ์ ์ง์ ํ๋๋ฐ,
๋ง๋ฃ์ผ์ ๋น์๋๋ฉด ๋ง๋ฃ๋์ง ์๊ณ ๊ณ์ ์ฌ์ฉํ ์ ์์ด์.
๊ทธ๋ฆฌ๊ณ , ๋ฒ์ ์ ํ์์ ์ฌ์ฉํ ์ญํ ์ ๋ํด ์ ํํด ์ค๋๋ค.
์ฌ๊ธฐ๊น์ง ๋์๋ค๋ฉด ๊ฐ์ธ ์ก์ธ์ค ํ ํฐ ์์ฑ์ ๋๋ฌ ํ ํฐ์ ๋ง๋ค์ด ์ค ์ ์์ด์.
๊ทธ๋ผ ์์ ๊ฐ์ด ํ ํฐ์ด ์์ฑ๋๊ณ , ์ฌ๊ธฐ์ Your new ๊ฐ์ธ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๋ก ์ ์ด๋๋ ๊ฑธ ์ถ์ฒ๋๋ ค์.
๐ฆ GitLab Project API Token ๋ฐ๊ธ
์ด๋ฒ์๋ ๋ฐฐํฌ ๋์ Project(ํ๋ก์ ํธ)์ API ํ ํฐ์ ๋ฐ๊ธ ๋ฐ์ ๋ณผ๊ฒ์.
์ต์ด ํ๋ก์ ํธ์์ ์์ ๊ฐ์ด ์ก์ธ์ค ํ ํฐ์ผ๋ก ์ด๋ํด ์ค๋๋ค.
์์ ๊ฐ์ด ์ ๊ท ํ ํฐ ์ถ๊ฐ๋ฅผ ๋๋ฌ์ค๊ฒ์.
์์ ๊ฐ์ด ํ ํฐ ์ด๋ฆ์ ์ค์ ํ๊ณ , ๋ง๋ฃ์ผ์ ๊ณต๋ฐฑ์ผ๋ก ๋์ด ๋ง๋ฃ๋์ง ์๊ฒ ํ์์ด์.
์ญํ ์๋ ํด๋น ํ๋ก์ ํธ์ ํ ํฐ์ ํตํด ์์
ํ ์ญํ ์ ์ง์ ํด ์ฃผ์๊ณ , ๋ฒ์๋ ๋ชจ๋ ์ ํํด ์ฃผ์์ด์.
์ญํ ์ ํ์ ๊ฒฝ์ฐ ํด๋น ํ ํฐ ์ฌ์ฉ์ ์ด๋จ ๋ ํ๋๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ๊ฒ์ด๊ณ ,
๋ฒ์ ์ ํ์ ๋๋๋ก ๊ผญ ํ์ํ ์ญํ ๋ง ๋ถ์ฌํ๋ ๊ฑธ ์ถ์ฒํด์.
์ฌ๊ธฐ๊น์ง ๋์๋ค๋ฉด project access token ์์ฑ์ ๋๋ฌ ํ ํฐ์ ์์ฑํฉ๋๋ค.
ํ ํฐ์ ๊ฒฝ์ฐ ๋นจ๊ฐ ๋ค๋ชจ์นธ ํ์์ ์์ด์ฝ์ ๋๋ฅด๋ฉด ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๊ฐ ๋ผ์.
์ด ํ ํฐ์ ์ ํจ์ค์ ๋ฑ๋กํด ์ค๊ฑฐ์์.
๐ฆ Jenkins Personal Access Token Credentials ์ถ๊ฐ
ํ๋ฌ๊ทธ์ธ ์ค์น๊ฐ ์๋ฃ๋๋ฉด ์์ ๊ฐ์ด ์ด๋ํด ์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ด ์ด๋ํด ์ค๋๋ค.
์ต์ด Kind ๋ถ๋ถ์ ์์ ๊ฐ์ด ์ ํํด ์ค๊ฒ์.
์ด ๋ถ๋ถ์ gitlab Access Token (์ธ์ฆ ํ ํฐ)์ ๋ฑ๋กํ๋ ๊ณณ์ด์์.
์์ ๊ฐ์ด gitlab ๊ณ์ ์ธ์ฆ์ฉ ํ ํฐ์ ๋ฑ๋กํด ์ฃผ์์ด์.
๐ฆ Jenkins Project API Token Credentials ์ถ๊ฐ
์ด๋ฒ์ ํ๋ก์ ํธ API ํ ํฐ ๋ฑ๋ก์ ์ํด ๋ค์ Credentials ๋ฑ๋ก์ ์งํํด ๋ณผ๊ฒ์.
์์ ๊ฐ์ด kind๋ฅผ GitLab API token์ผ๋ก ์ ํํด ์ค๋๋ค.
API token์ gitlab์์ ๋ฐ๊ธํ ํ ํฐ์ ์
๋ ฅํด์ฃผ๊ณ , ID์ ์ค๋ช
์ ์จ ์ค ๋ค Create๋ฅผ ๋๋ฌ ๋ฑ๋กํด ์ค๊ฒ์.
์ด๋ ๊ฒ ๋ ๊ฐ์ Credentials๊ฐ ์ ํจ์ค์ ๋ฑ๋ก ๋์์ด์.
๐ฝ Jenkins ์ค์
๐ฆ GitLab ์ฐ๋
์ด๋ฒ์๋ ์ ํจ์ค์์ gitlab ๋ฑ๋ก์ ํด์ฃผ๋ ค๊ณ ํด์.
gitlab ๋ฑ๋ก์ ์ํด ์์ ๊ฐ์ด System์ผ๋ก ์ด๋ํด ์ค๊ฒ์.
์คํฌ๋กค์ ๋ด๋ฆฌ๋ค ๋ณด๋ฉด ์์ ๊ฐ์ ํ๋ฉด์ ๋ง๋๊ฒ ๋ ๊ฑฐ์์.
์ด ๊ณณ์์ ์์
ํด ๋ณผ๊ฒ์.
์ต์ด ์์ ๊ฐ์ด ์ฐ๊ฒฐํ gitlab์ ๋ํ ๊ตฌ๋ถ์ ์ํด ์ด๋ฆ์ ์ง์ด์ฃผ๊ณ , Server URL์ gitlab ์๋ฒ ์ฃผ์๋ฅผ ์
๋ ฅํด ์ค๋๋ค.
Credentials์๋ gitlab Personal Access Token์ ๋ํ Credentials๋ฅผ ์ ํํด ์ฃผ๋ฉด ๋ผ์.
Web Hook (์นํ
)์ ์ผ๋จ ๋ชจ๋ ์ ํํด ์ฃผ๊ณ , ์์ธํ ๋ด์ฉ์ ์๋์์ ์งํํด ๋ณผ๊ฒ์.
๊ทธ๋ฐ ๋ค ์๋์ Test connection์ ๋๋ฌ ์์ ๊ฐ์ด ๋์ค๋ฉด ์ ์ ์ฐ๊ฒฐ๋ ๊ฒ์ด์์.
์ฌ๊ธฐ๊น์ง ๋์๋ค๋ฉด ๋งจ ๋ฐ์ ์ ์ฅ์ ๋๋ฌ System ์ฐฝ์ ๋น ์ ธ ๋์ ์ค๋๋ค.
๐ฆ Item ๋ง๋ค๊ธฐ
์์ ๊ฐ์ด Item์ ๋ง๋ค์ด ์ฃผ๋๋ฐ, ์ฃผ๋๋ Multibranch Pipeline์ผ๋ก ๋ง๋ค์ด ์ค๊ฑฐ์์.
ํด๋น Item ์ด๋ฆ์ Display Name์ ์ ์ด์ฃผ๊ณ , Description์ ์์ธ ์ค๋ช
์ ์ ์ด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค Branch Sources ์น์
์ Add source ๋ฒํผ์ ๋๋ฌ์ค๋๋ค.
์ฌ๊ธฐ์ GitLab Project๋ฅผ ์ ํํด ์ค๊ฒ์.
๊ทธ๋ผ ์์ ๊ฐ์ด ๋์ค๊ฒ ๋ ๊ฑฐ์์.
์ข ๋ฅ | ์ ์ธ ๋ด ์ฉ |
Server | ์ ํจ์ค System์์ ๋ฑ๋กํ gitlab ์ ๋ณด๊ฐ ์๋์ผ๋ก ํ ๋น. ์ฌ๋ฌ gitlab ๋ฑ๋ก ์ ์ ํ ํ์. |
Checkout Credentials |
Git ์ธ์ฆ์ ์ํ Username๊ณผ Password ํน์ gitlab์์ ๋ฐ๊ธํ Personal Access Token์ ๋ํ Credentials ์ ํ. |
Owner | ํด๋น Repository์ ์์ ์ ์ ๋ณด ์
๋ ฅ. (๊ฐ์ธ Repository ์ผ ์ ๊ฐ์ธ gitlab ID๋ฅผ ๋ช ์ํ๊ณ , ์กฐ์ง์ผ๋ก ์ค์ ๋์ด ์๋ Repository์ ๊ฒฝ์ฐ ์กฐ์ง ์ด๋ฆ์ ๋ช ์) |
Projects | ์ 3๊ฐ์ง์ ์ ๋ณด๊ฐ ์ ๋๋ก ์
๋ ฅ ๋์์ ๊ฒฝ์ฐ ํด๋น ์์ ์์ Repository ๋ชฉ๋ก์ด Dropdown ํ์์ผ๋ก ๋ณด์ด๊ฒ ๋๋ฉฐ, ๋ฐฐํฌ๋ฅผ ์งํํ Project ์ด๋ฆ ์ ํ. |
์ด๋ฒ์ ํด๋น Item์์๋ง ์ฌ์ฉํ ์ ์๋ Checkout Credentials๋ฅผ ๋ง๋ค์ด ๋ณผ๊ฒ์.
์ข ๋ฅ | ์ ์ธ ๋ด ์ฉ |
Kind | Credentials ์ข ๋ฅ. |
Username | GitLab Username (ID). |
Password | GitLab์์ ๋ฐ๊ธ๋ฐ์ Personal Access Token. |
ID | ํด๋น Credentials๋ฅผ ๊ตฌ๋ถํ Unique ๋ฌธ์์ด. |
Description | ํด๋น Credentials์ ๋ํ ์์ธ ์ค๋ช ๊ธฐ์ฌ. |
์ฃผ๋๋ Kind์ Username with password๋ฅผ ์ ํํด ์ฃผ๊ณ ์งํํด ์ฃผ๋ ค๊ณ ํด์.
Add ๋ฒํผ์ ๋๋ฌ ๋ฑ๋กํด ์ค๊ฒ์.
์์ฑํ Credentials๋ฅผ ์ ํํด ์ค๋๋ค.
ํ์ฌ ์ฃผ๋์ ํ๋ก์ ํธ๋ ์กฐ์ง์ผ๋ก ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ gitlab์ ์์ ๋นจ๊ฐ์ ๋ค๋ชจ์นธ์ ํ์๋ ์ ๋ณด์ ๊ฐ์ด ์กฐ์ง ์ ๋ณด๋ฅผ
Owner ๋ถ๋ถ์ ๋ช
์ํด ์ฃผ์ด์ผ ํด์.
๊ทธ๋ผ ์์ ๊ฐ์ด Projects์ ์๋์ผ๋ก ํ๋ก์ ํธ ๋ชฉ๋ก์ด ๋ณด์ผํ
๋ฐ, ํ์ฌ ์ฃผ๋๋ ํ ๊ฐ ๋ฐ์ ์์ด์ ๋ฐ๋ก ์ ํ ๋์์ด์.
์ด๋ฒ์ Behaviours์ ๋ํด ์ค์ ํด ๋ณด๋๋ก ํ ๊ฒ์.
์ต์ด Discover branches๋ ํ์ํ Branch๋ฅผ ์ ํํ ์ ์๋ ๋ถ๋ถ์ด์์.
์ด ๋ถ๋ถ์ ์์ ๊ฐ์ด ์ด ์ธ ๊ฐ์ง ์ค ํ๋๋ฅผ ์ ํํ ์ ์์ด์.
์ข ๋ฅ | ์ ์ธ ๋ด ์ฉ |
Only branches that are not also field as MRs | Merge Request๋ก ์ ์ถ๋์ง ์์ Branch๋ง ํ์. |
Only branches that are also field as MRs | Merge Request๋ก ์ ์ถ๋ branch๋ง ํ์. |
All Branches | ๋ชจ๋ Branch ํ์. |
์ฃผ๋๋ ๋ชจ๋ Branch(๋ธ๋ฐ์น)๋ฅผ ํ์ํ ์ ์๋๋ก All Branches๋ฅผ ์ ํํด ์ค๊ฑฐ์์.
์ด ๊ณณ์์๋ Pull Request๊ฐ ์ด๋ป๊ฒ ๋ฐ๊ฒฌ๋๋์ง ์ค์ ํ ์ ์์ด์.
์ข ๋ฅ | ์ ์ธ ๋ด ์ฉ |
Merging the merge request with the current target branch revision |
ํ์ฌ branch ๋ฒ์ ๊ณผ ๋ณํฉ๋ ์์ฒญ์ ๋ํด ํ์. |
The current merge request revision | ๊ฐ Pull Requtest๋ฅผ ํ ๋ฒ์ฉ ๋ฐ๊ฒฌํ๊ณ ๋ณํฉํ์ง ์๊ณ , Pull Requtest Head ๋ฆฌ๋น์ ์ ํด๋นํ๋ ๋ฆฌ๋น์ ๊ฒ์. |
Both the current merge request revision and the merge request merged with the current target branch revision |
ํ์ฌ ๋ณํฉ ์์ฒญ๋ ๋ฒ์ ๊ณผ ํ์ฌ branch ์ ๋ณํฉ์์ฒญ๋์ด ๋ณํฉ๋ ๋ฒ์ ์ ๋ํด ํ์. |
์ด ๊ณณ์์ ์ฃผ๋๋ Merging the merge request with the current target branch revision ์ฌ์ฉํด ๋ณด๋ ค๊ณ ํด์.
Repository์ ๋ํ ์ฝ๊ธฐ ์ก์ธ์ค ๊ถํ์ ๊ฐ์ง ๋ชจ๋ ์ฌ์ฉ์๊ฐ Repository๋ฅผ ํฌํฌํ๊ณ ,
์์ ์ ํฌํฌ์ ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ๋ค์,
๋ณ๊ฒฝ ์ฌํญ์ด ์๋ ์๋ Repository์ ๋ํด Pull Request๋ฅผ ๋ง๋ค ์ ์์ด์.
์ด ๊ณณ์๋ ์์ค ์ฝ๋ ์ ์ด์ ์ ์ฅ๋ ์ค์ํ ํ์ผ์ด ์์ ๊ฑฐ์์. ์๋ฅผ ๋ค์ด Jenkins ํ์ผ์๋ ์
์์ ์ธ ๊บผ๋ด๊ธฐ ์์ฒญ์ ์ํํ๊ธฐ ์ํด ์๋๋ฐ์ค ๊บผ๋ด๊ธฐ ์์ฒญ์ ๋ํ ๊ตฌ์ฑ ์ธ๋ถ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์๋ต๋๋ค. Jenkins ํ์ผ์ ์์ ํ์ฌ ๋ณดํธ๋ฅผ ์ ๊ฑฐํ๋ ์
์์ ์ธ ๊บผ๋ด๊ธฐ ์์ฒญ ์์ฒด๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด ํฌํฌ์์
๊บผ๋ด๊ธฐ ์์ฒญ์ ๋ํ ์ ๋ขฐ ์ ์ฑ
์ ์ ์ํ ์ ์๋ ๋ถ๋ถ์ด ์ด ๋ถ๋ถ์ด์์.
์ฆ, Fork๋ Repository์ ๋ํด ๋ณํฉ ์์ฒญ์ ํ์ํ๋ ์กฐ๊ฑด์ ๋ํด ์ค์ ํด ์ฃผ๋ ๋ถ๋ถ์ด์์.
์ข ๋ฅ | ์ ์ธ ๋ด ์ฉ |
Everyone | ๋ชจ๋ ๊ณณ์ ๋ํด ์ ๋ขฐ. |
Members | Fork๋ Repository์ Member์ธ ๊ฒฝ์ฐ ์ ๋ขฐ. |
Nobody | Fork๋ ๊ณณ์์์ ๋ณํฉ ์์ฒญ์ ๋ชจ๋ ๋น ์ ๋ขฐ. |
Trusted Memebers | Fork๋ Repository์์ ์ ๋ขฐํ๋ Member์ธ ๊ฒฝ์ฐ ์ ๋ขฐ. |
์ฃผ๋๋ ์ด ๊ณณ์์ Trusted Members๋ฅผ ์ ํํด ์ค๊ฑฐ์์.
์ด๋ฒ์๋ Filter by name (with regular expression) ํ์ฑํ๋ฅผ ์ํด ์์ ๊ฐ์ด Add ๋ฒํผ์ ๋๋ฌ ์ค๊ฑฐ์์.
์ด ๋ถ๋ถ์ Discover์์ ์ ํํ Branch ์ ๋ต ์ค ์ ๊ท ํํ์(Regular)๋ฅผ ์ฌ์ฉํ์ฌ CI/CD๋ฅผ ์ ๋ฐํ Trigger ๋์์
ํฌํจํ Branch๋ฅผ ๋ค์ ์ ํ๋ ๋ถ๋ถ์ผ๋ก ์ค์ ํ ์ ์์ด์.
์ฃผ๋๋ ์์ ๊ฐ์ด ๊ฐ๋ฐ ํ๊ฒฝ์ฉ Branch dev์ ์ด์ ํ๊ฒฝ์ฉ Branch Master๋ฅผ ์ค์ ํด ์ค๊ฑฐ์์.
์ด ๊ณณ์ ์
๋ ฅ๋์ง ์์ Branch๋ CI/CD Trigger๊ฐ ๋ฐ๋๋์ง ์์์.
์ด๋ฒ์๋ ์์ ๊ฐ์ด Filter by name (with wildcards)๋ฅผ ํ์ฑํ ํด ์ค๊ฒ์.
์ด ๋ถ๋ถ์ Discover ์ ๋ต์ ํด๋น๋๋ Branch ์ค *์ผ๋ก ๋์์ ํฌํจํ Branch๋ฅผ ๋ค์ ์ ์ ํด ์ฃผ๋ ๊ณณ์ด์์.
Filter by name์ ํ๋๋ง ์ ํด์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ํผ๋์ค๋ฝ์ง ์์๊ฑฐ์์.
์ด ๊ณณ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ฉ Branch์ ์ด์ ํ๊ฒฝ์ฉ Branch๋ง Trigger๊ฐ ๋ฐ๋ ๋๋๋ก ์ค์ ํด ์ฃผ์์ด์.
Exclude์ ํน์ Branch ์ด๋ฆ์ ๋ฃ๊ฒ ๋๋ฉด ํด๋น Branch๋ Trigger๊ฐ ๋ฐ๋๋์ง ์๊ฒ ๋ง์ ์ ์์ด์.
์ด ๊ณณ Build ์ค์ ๋ถ๋ถ์ jenkins File์ ์ฝ์ ์ ์๋๋ก ์ค์ ํด ์ฃผ๋ ๋ถ๋ถ์ด์์.
์ฃผ๋๋ ์์ค ์ฝ๋ ๋ด์ jenkins File์ ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ์์น๋ฅผ ์์ ๊ฐ์ด ์ง์ ํด ์ฃผ์์ด์.
์ด๋ฒ์ ํด๋น Job์ ํตํด CI/CD๊ฐ ๊ฑธ๋ฆด ์ ์๋ Trigger ์ค์ ์ ํด ๋ณด๋๋ก ํ ๊ฒ์.
๋ ํญ๋ชฉ์ ๋ชจ๋ ํ์ฑํ ์์ผ ์ค๊ฒ์.
์ต์ด pericdically if not otherwise run ์ค์ ์ด์์.
์ด ์ค์ ์ ์ผ๋ถ ํด๋ ์ ํ์ ์ธ๋ถ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ์ฆ์ ์๋์ผ๋ก ๋ค์ ์ธ๋ฑ์ฑ ๋๊ฒ ๋์.
์๋ฅผ ๋ค์ด, ๋ค์ค ๋ถ๊ธฐ ํ๋ก์ ํธ๋ SCM ๋ณ๊ฒฝ ์๋ฆผ์ ์์ ํ ๋ SCM ์ ์ฅ์์์ ์ ๋ถ๊ธฐ ๋๋ ์ ๊ฑฐ๋๊ฑฐ๋ ์์ ๋ ๋ถ๊ธฐ๋ฅผ ๋ค์ ํ์ธํ๊ฒ ๋๋ต๋๋ค. (ํธ์ ์๋ฆผ์ ๊ฐ ๋ถ๊ธฐ ์์ค์ ์ฌ์ฉ๋๋ SCM ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ผ ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.) ๊ทธ๋ฌ๋ ์ด๋ฌํ ์๋ฆผ์ ๋๋๋ก ์ ๋ขฐํ ์ ์๊ฑฐ๋ Jenkins๊ฐ ์๋ฆผ์ ๋ฐ๊ธฐ ์ํด ์คํํ์ง ์์ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ํจ์ค๊ฐ ๋ฐฉํ๋ฒฝ ๋ค์ ์๊ณ ์ธ๋ถ ์์คํ
๋ง ํด๋งํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฆ๊ฐ์ ์ธ ์๋ฆผ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
์ด Trigger๋ ํ์ํ ๊ฒฝ์ฐ ์ฃผ๊ธฐ์ ์ธ ํด๋ฐฑ์ ํ์ฉํฉ๋๋ค. ์ง์ ๋ ๊ฐ๊ฒฉ ๋์ ์ธ๋ฑ์ฑ์ด ์ํ๋์ง ์์ ๊ฒฝ์ฐ ์ธ๋ฑ์ฑ์ด ์์ฝ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ค ๋ถ๊ธฐ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ํธ์ ์๋ฆผ์ ๋ํด ์์ค ์ ์ด ์์คํ
์ด ๊ตฌ์ฑ๋์ด ์์ง ์์ ๊ฒฝ์ฐ ์งง์ ๊ฐ๊ฒฉ์ ์ค์ ํฉ๋๋ค(๋๋ถ๋ถ์ ์ฌ์ฉ์๊ฐ 15๋ถ์์ 1์๊ฐ ์ฌ์ด๋ฅผ ์ ํํจ). ํธ์ ์๋ฆผ์ ์ํด ์์ค ์ ์ด ์์คํ
์ด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ํธ์ ์๋ฆผ์ด ์์ค๋ ๊ฒฝ์ฐ ์ต๋ ํ์ฉ ์ง์ฐ ์๊ฐ์ ํด๋นํ๋ ๊ฐ๊ฒฉ์ ํ๋ฃจ์ ๋ง์ง๋ง ์ปค๋ฐ์ผ๋ก ์ค์ ํฉ๋๋ค. (์ดํ ์ปค๋ฐ์ ์ด์จ๋ ์ธ๋ฑ์ฑ์ ํธ๋ฆฌ๊ฑฐํด์ผ ํ๊ณ ์ปค๋ฐ์ด ํฝ์
๋๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ฏ๋ก ๋๋ถ๋ถ์ ์ฌ๋๋ค์ 4์๊ฐ์์ 1์ผ ์ฌ์ด๋ฅผ ์ ํํฉ๋๋ค.)
์ด ๊ณณ์์๋ ๋ง์ง๋ง ์ธ๋ฑ์ฑ ์ดํ ์ธ๋ฑ์ฑ์ด ํธ๋ฆฌ๊ฑฐ๋๊ธฐ ์ ์ ๊ฒฝ๊ณผํ ์ ์๋ ์ต๋ ์๊ฐ์ ์ค์ ํ ์ ์์ด์.
์: ๊ฐ๊ฒฉ('5m') // ๋๋ '2h', '7d', '5000ms', '60s'
์ฃผ๋๋ ์ด ์ค์ ์ 1 day๋ก ํด ์ค๊ฒ์.
์ด ๊ณณ์ ๋ฉํฐ๋ธ๋ฐ์น ๊ฒ์ ์น ํ
Trigger๋ฅผ ์ฌ์ฉํ์ฌ
์ด ๋ฉํฐ๋ธ๋ฐ์น ์์
์ ๊ฒ์์ Triggerํ ์ ์๋๋ก ์ค์ ํ ์ ์๋ ๊ณณ์ด์์.
์์ ๊ฐ์ด ?๋ฅผ ๋๋ฅด๊ฒ ๋๋ฉด Payload URL ์์๋ฅผ ํ์ธํ ์ ์์ด์.
ํ ํฐ์ ์์์ ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ , JENKINS_URL/multibranch-webhook-trigger/invoke?token=[Trigger token] ์ ๋ฏธ๋ฆฌ ์์ฑํด๋๊ณ ์๋์ webhook ์ถ๊ฐ ์ ๋ฃ์ด์ฃผ๋ ค๊ณ ํด์.
์ข ๋ ์์ธํ ์ค๋ช
ํด ๋ณด์๋ฉด
Trigger token ๋ถ์ ๋ค์ด๊ฐ ๋ด์ฉ์ gitlab์์ Webhook ์ค์ ์ Request header์ ๋ด์ Webhook Token์ ์ง์ ํด ์ฃผ๋ ๋ถ๋ถ์ด์์. ์ฆ, Webhook Token๊ณผ ์ผ์น์ํฌ Token์ ์ค์ ํ๋ ๋ถ๋ถ์ด์์.
HTTP Request๋ก JENKINS_URL/multibranch-webhook-trigger/invoke?token=[ํธ๋ฆฌ๊ฑฐ ํ ํฐ]
์์ URI๋ฅผ ์ด์ฉํด์ Token์ด ์ผ์นํ๋ ๊ฒฝ์ฐ ๋ค์ค ๋ถ๊ธฐ ๊ฒ์์ด bi trigger ๋๋ต๋๋ค.
์ด ๊ณณ์ ์์์ Gitlab Access Token ์ ์ฅ ์ ์ด์ฉํ๋ ID ๊ฐ์ ์ง์ ํด ์ฃผ๋ฉด ๋๋ต๋๋ค.
์ด ๋ถ๋ถ ์ค์ ์ ์ํด gitlab์์ ์นํ
์์ฑ์ ํด๋ณด๋ ค๊ณ ํด์.
์์ ๊ฐ์ด ์นํ
์ค์ ์ผ๋ก ๋ค์ด๊ฐ ์ค๊ฒ์.
๊ทธ๋ฆฌ๊ณ ์ ์นํ
์ถ๊ฐ๋ฅผ ๋๋ฌ ์ค๋๋ค.
URL์ ์์์ ๋ฏธ๋ฆฌ ์์ฑํ Trigger URL, Secret token์ Trigger Token์ ๋ฃ์ด์ฃผ์์ด์.
๊ทธ๋ฆฌ๊ณ ์์ฑ์ ๋๋ฌ์ค๋๋ค.
๋ง์ฝ ์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด Local Network(๋ก์ปฌ ๋คํธ์ํฌ)์ ๋ํ Request(์์ฒญ)์ด ํ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ด์์.
์ด ๋ถ๋ถ์ ํด๊ฒฐํด ๋ณผ๊ฒ์.
์ต์ด ๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ ๋ค ์์ ๊ฐ์ด ๊ด๋ฆฌ์ ์์ญ์ผ๋ก ์ง์
ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ด ๋ ๊ฐ๋ฅผ ์ฒดํฌํด ์ฃผ๊ณ , ๋ณ๊ฒฝ์ฌํญ ์ ์ฅ์ ๋๋ฌ ์ค๋๋ค.
๋ค์ ์นํ
์ ๋ง๋ค์ด ์ค๊ฒ์.
์นํ
์ ๋ง๋ค๊ณ , ์ ์ค์ ๋์๋์ง ํ์ธํด ๋ณผ ์ ์์ด์.
Test(ํ
์ฝ) ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฌ๋ฌ Event(์ด๋ฒคํธ)์ ๋ํด ํ
์คํธ๋ฅผ ํด๋ณผ ์ ์์ด์.
์ฃผ๋๋ ํธ์ฌ ์ด๋ฒคํธ ํ
์คํธ๋ฅผ ์งํํด ๋ณด์๊ณ , ์์ ๊ฐ์ด 200 OK ์๋ต์ ๋ฐ์๊ฑธ ํ์ธํ ์ ์์ด์.
๋ค์ ์ ํจ์ค๋ก ๋์์์
์์ ๊ฐ์ด ์ค์ ์ด ๋ชจ๋ ๋ง์ณค์ผ๋ฉด ๋งจ ๋ฐ์ Save ํน์ ์ ์ฅ์ ๋๋ฌ ํด๋น ์ค์ ์ฐฝ์ ๋๊ฐ๋๋ก ํฉ๋๋ค.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ง ์ฐธ๊ณ ์๋ฃ
https://giggal-people.tistory.com/entry/CICD-Jenkins-Node-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0
'System ์์ ์ค > DevOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Valut] ID ๊ธฐ๋ฐ ๋น๋ฐ ๋ฐ ์ํธํ ๊ด๋ฆฌ ์์คํ ๊ตฌ์ถ feat.Docker (0) | 2023.11.03 |
---|---|
[Zabbix][Ubuntu22.04.3 LTS] Monitoring System ๊ตฌ์ถ feat.Docker & Grafana (0) | 2023.10.06 |
[ELK Stack] Ubuntu 22.04.3 ๋ชจ๋ํฐ๋ง ์์คํ ๊ตฌ์ถ feat.Docker & beat (0) | 2023.10.03 |
[Gitlab][CI/CD] GitLab Runner ์ค์น (0) | 2023.08.02 |
[Redmine] Cell Phone, Tablet์ผ๋ก ์ ์ํ๊ธฐ (0) | 2023.07.15 |