์ ํจ์ค(Jenkins)๋ ๋จ์ด๊ฐ ์์ ๋ณด๋ค ์ง๊ธ์ด ๋ ๋ง์ ์ฌ๋๋ค์ ์ ์ ํตํด์ ๋ค๋ ค์ง๊ณ ์๋ค. IT์ ๋ชธ๋ด๊ณ ๊ณต๋ถ๋ฅผ ํ๊ฑฐ๋ ์ผ์ ํ๋ ์ฌ๋์ด๋ผ๋ฉด 1๋ฒ์ฏค ๊ผญ ๋ค์ด๋ดค์๊ฒ ๊ฐ๋ค. Docker ๋งํผ์ด๋ ์ ๋ช ํ ๋ ์์ด์ง ์๋ ์๊ฐํ๋ค. ์ ํจ์ค๋ 'CI/CD', ์ฆ ๋น๋/ํ ์คํธ/๋ฐฐํฌ๋ฅผ ์๋ํํ ์ ์๋ ํน์ง์ด ์๋ค. ์ด์์ค์ธ ์๋น์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ๋ฃ๋๋ค๊ณ ํ์๋๋ ์๋น์ค๋ฅผ ์ค๊ฐ์ ์ค๋จํ๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ๋น๋ ํ ๋ฐฐํฌ ํ ํ์ ๋ค์ ์๋น์ค๋ฅผ ์ฌ ๊ฐ๋ํ๋ ค๋ฉด ๊ณผ์ ๋ ๋ง๊ณ ์ค๊ฐ ๊ณผ์ ์ ๋ฐ๋ฅธ ์๋น์ค ์ค๋จ์ด ์์ ์ ์๋ค. ์ด๋ฐ ๋ถ๋ถ๋ค์ ์ ํจ์ค(Jenkins)๊ฐ ํด๊ฒฐํด ์ค ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ทธ๋ฐ ํน์ง์ ๊ฐ์ง ์ ํจ์ค์ ๋ํด์ ์์๋ณด์!
์ ํจ์ค(Jenkins)๋?
์ ํจ์ค์ ํน์ง๊ณผ ์ฅ/๋จ์
์ ํจ์ค๋?
Jenkins๋ ์ํํธ์จ์ด ๋น๋, ํ ์คํธ, ์ ๊ณต ๋๋ ๋ฐฐํฌ์ ๊ด๋ จ๋ ๋ชจ๋ ์ข ๋ฅ์ ์์ (CI/CD(Continuous Integration & Continuous Deployment) ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถ)์ ์๋ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ ๋ฆฝํ ์คํ ์์ค ์๋ํ ์๋ฒ์ ๋๋ค. Jenkins๋ ๊ธฐ๋ณธ ์์คํ ํจํค์ง, Docker๋ฅผ ํตํด ์ค์นํ ์ ์์ผ๋ฉฐ, Java Runtime Environment(JRE)๊ฐ ์ค์น๋ ๋ชจ๋ ์์คํ ์์ ๋จ๋ ์ผ๋ก ์คํํ ์๋ ์์ต๋๋ค.
CI/CD(Continuous Integration & Continuous Deployment)
- CI(์ง์์ ํตํฉ)
- ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๋๋ง๋ค ์๋์ผ๋ก ๋น๋ํ๊ณ ํ ์คํธ๋ฅผ ์คํํ์ฌ ์ฝ๋์ ์์ ์ฑ์ ๊ฒ์ฆํ๋ ๊ณผ์ - CD(์ง์์ ๋ฐฐํฌ)- ๊ฒ์ฆ๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์ด์ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ๊ณผ์
์ ํจ์ค๋ Java ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก, Tomcat ๊ฐ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์์ ์คํ๋๊ฑฐ๋ ๋ ๋ฆฝ์ ์ธ ์๋ฒ๋ก ๋์ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ์ ํจ์ค๋ฅผ ๊ตฌ๋ํ๊ธฐ ์ํด์๋ JDK๊ฐ ํ์ํฉ๋๋ค.
๐ ์ค์ ์ฌ์ฉ ์์:
๊ฐ๋ฐ์๊ฐ Git์ ์ฝ๋๋ฅผ ํธ์ํ๋ฉด Jenkins๊ฐ ์ด๋ฅผ ๊ฐ์งํ๊ณ ์๋์ผ๋ก ๋ค์ ๋จ๊ณ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
- ์์ค ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ (GitHub/GitLab/Bitbucket ์ฐ๋)
- ์ฝ๋ ์ปดํ์ผ ๋ฐ ๋น๋ (์: mvn package ๋๋ gradle build)
- ๋จ์ ํ ์คํธ ์คํ (JUnit, TestNG, Jest ๋ฑ)
- ์ฝ๋ ์ ์ ๋ถ์ (SonarQube, Checkstyle ํ์ฉ)
- ๋ฐฐํฌ (Docker ์ปจํ ์ด๋ ๋น๋ ํ Kubernetes ๋ฐฐํฌ)
ํด๋น ๊ณผ์ ์ด ์์ ํ ์๋ํ๋์ด ์์ด, ๊ฐ๋ฐ์๋ ์์์ ์์ด ํจ์จ์ ์ผ๋ก ์ฝ๋๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์ ํจ์ค ํน์ง
๐น ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฐ ์ํคํ ์ฒ
Jenkins๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋, ํ
์คํธ ๋ฐฐํฌ ๊ธฐ๋ฅ๋ง ํฌํจํ๊ณ ์๊ณ , ๋๋จธ์ง๋ ํ๋ฌ๊ทธ์ธ์ ํตํด ํ์ฅํ ์ ์์ต๋๋ค. ํ์ฌ 1,800๊ฐ ์ด์์ ํ๋ฌ๊ทธ์ธ์ด ์ ๊ณต๋์์ต๋๋ค.
๋ํ์ ์ธ ํ๋ฌ๊ทธ์ธ ์์
- Git Plugin: GitHub/GitLab/Bitbucket๊ณผ ์ฐ๋
- Maven Integration Plugin: Maven ๋น๋ ์๋ํ
- Pipeline Plugin: CI/CD ํ์ดํ๋ผ์ธ์ ์ฝ๋ํ
- Docker Plugin: Docker ์ปจํ ์ด๋ ์์ฑ ๋ฐ ๋ฐฐํฌ
- Kubernetes Plugin: ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ
๐น ๋ถ์ฐ ๋น๋ ์ง์ (Master-Agent ๊ตฌ์กฐ)
Jenkins๋ ๋จ์ผ ์๋ฒ์์ ๋ชจ๋ ๋น๋๋ฅผ ์ํํ๋ ๊ฒ์ด ์๋๋ผ, ๋ค์์ ์์ด์ ํธ(Worker Node)๋ฅผ ํ์ฉํด์ ๋น๋๋ฅผ ๋ณ๋ ฌ๋ก ์ํํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ๋์ ์๋ฒ๋ฅผ ์ด์ฉํด์ ๋น๋๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ฉด ์๋๋ฅผ ํฅ์ ์ํฌ์ ์๊ณ ๋ฌด๊ฑฐ์ด ๋น๋๋ฅผ ๋ณ๋์ ์๋ฒ์์ ์คํํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์์ค๋ฅผ ๋ถ์ฐ ์ํฌ์ ์์ต๋๋ค.
Jenkins Master : ๋ฉ์ธ ์ปจํธ๋กค๋ฌ ์ญํ (UI ์ ๊ณต, Job ๊ด๋ฆฌ, ๋น๋ ์ค์ผ์ฅด๋ง)
Jenkins Agent : ์ค์ ๋ก ๋น๋์ ํ ์คํธ๋ฅผ ์คํํ๋ ๋ ธ๋ (์ฌ๋ฌ ๊ฐ ๊ตฌ์ฑ ๊ฐ๋ฅ)
๐น Jenkins Pipeline (์ฝ๋ ๊ธฐ๋ฐ CI/CD ์๋ํ)
๊ธฐ์กด์๋ GUI์์ Job์ ์์ฑํด์ผ ํ์ง๋ง, Jenkins Pipeline์ ์ฌ์ฉํ๋ฉด ์ฝ๋(์คํฌ๋ฆฝํธ)๋ก ๋น๋ ๊ณผ์ ์ ์ ์ํ ์ ์์ต๋๋ค.
- Jenkinsfile ์ด๋ผ๋ ํ์ผ์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ก Pipeline์ ๊ด๋ฆฌ
- ๋ฒ์ ๊ด๋ฆฌ(Git ์ฐ๋ ๊ฐ๋ฅ), ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git 'https://github.com/example/repo.git'
}
}
stage('Build') {
steps {
sh 'mvn package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy') {
steps {
sh 'scp target/*.jar user@server:/deploy/path/'
}
}
}
}
์ ์คํฌ๋ฆฝํธ๋ฅผ Jenkins์์ ์คํํ๋ฉด, ์๋์ผ๋ก ์ฝ๋ ์ฒดํฌ์์ → ๋น๋ → ํ ์คํธ → ๋ฐฐํฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
๐น Jenkins ์๋
CI/CD ๊ณผ์ ์์ ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ๋ฑ์ ์ํ๋ฅผ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์๋ฆผ(Notifications) ํํ๋ก ์ ๊ณตํด ๋น ๋ฅธ ํผ๋๋ฐฑ ๋ฐ ๋ฌธ์ ํด๊ฒฐ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์ฑ๋์ ํตํด ์๋ฆผ์ ๋ณด๋ผ ์ ์๊ณ ๋น๋ ๊ณผ์ ์ค ๋ค์ํ ์ํฉ์ ๋ง์ถฐ ์๋์ ์ ์กํ ์ ์์ต๋๋ค.
๋ค์ํ ์ฑ๋
- ์ด๋ฉ์ผ(Email) : ๊ธฐ๋ณธ์ ์ธ ์๋ ๋ฐฉ์(SMTP ์ค์ ํ์)
- ๋ฉ์ ์ ์ฐ๋ : Slack, Discord, Teams, Telegram ๋ฑ ์ค์๊ฐ ํ์ ๋๊ตฌ์ ํตํฉ
- Webhook : ์ธ๋ถ ์์คํ (API ์๋ฒ, ์ฑ๋ด, ๋ชจ๋ํฐ๋ง ์์คํ ๋ฑ)๊ณผ ์ฐ๋
- ์ด์ ํธ๋์ปค : Jira, Githup ๋ฑ ๋น๋ ์คํจ ์ ์๋์ผ๋ก ํฐ์ผ ์์ฑ
- ๋์๋ณด๋(Grafana, Prometheus ๋ฑ)์ ์ฐ๋ํด ๋น๋ ์ํ ์๊ฐํ
์๋ ํธ๋ฆฌ๊ฑฐ(Trigger) ์ ๊ณต
- ์ฑ๊ณต(Success) : ๋ชจ๋ ๋จ๊ณ๊ฐ ์ ์ ์๋ฃ๋์์ ๋
- ์คํจ(Failure) : ๋น๋ ๋๋ ํ ์คํธ๊ฐ ์คํจํ์ ๋
- ๋ถ์์ (Unstable) : ์ผ๋ถ ํ ์คํธ ์คํจ ๋ฑ ๊ฒฝ๊ณ ์ํฉ
- ์ฐ์ ์คํจ(Repeated Failure) : ๊ฐ์ Job์ด ์ฐ์ํด์ ์คํจํ ๋
- ๋ฐฐํฌ ์๋ฃ(Deployment Completed) : ํ๋ก๋์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ฐฐํฌ๋์์ ๋
์ ํจ์ค ์ฅ์
๐น ๋ค์ํ ๋น๋ ๋ฐ ๋ฐฐํฌ ํ๊ฒฝ ์ง์
Java, SpringBoot, Node.js, Python, C++, .NET ๋ฑ ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค. Docker, Kubernetes์ ์ฐ๋ํ์ฌ ์ปจํ ์ด๋ ๊ธฐ๋ฐ์ ๋ฐฐํฌ๋ฅผ ์๋ํ ํ ์ ์๊ณ AWS, Azure, GCP ๋ฑ ๋ค์ํ ํด๋ผ์ฐ๋ ์๋น์ค์ ํตํฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐น ๋น ๋ฅธ ํผ๋๋ฐฑ & ์๋ ํ ์คํธ
CI/CD ํ์ดํ๋ผ์ธ์ ํตํด ๋ฒ๊ทธ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ณ ์์ ๊ฐ๋ฅํ๋ฉฐ ํ ์คํธ๊ฐ ์คํจํ๋ฉด ์ฆ๊ฐ ์๋ฆผ์ ํตํด ์ง์์ด ๊ฐ๋ฅํฉ๋๋ค. (์ด๋ฉ์ผ, Slack, Teams, Webhook ๋ฑ ์ง์)
์ฝ๋ ํธ์ → ์๋ ํ ์คํธ ์คํ → ๊ฒฐ๊ณผ ํ์ธ ๊ฐ๋ฅ
๐น ํ๋ฌ๊ทธ์ธ์ ํตํ ํ์ฅ์ฑ
- SonarQube์ ์ฐ๋ํ์ฌ ์ฝ๋ ํ์ง ๋ถ์ ๊ฐ๋ฅ
- Ansible, Terraform๊ณผ ์ฐ๋ํ์ฌ ์ธํ๋ผ ์๋ํ ๊ฐ๋ฅ
- Selenium๊ณผ ์ฐ๋ํ์ฌ UI ํ ์คํธ ์๋ํ ๊ฐ๋ฅ
๐น ์คํ ์์ค & ๋ฌด๋ฃ
๊ธฐ์ ์์๋ ๋น์ฉ ๋ถ๋ด ์์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ์ปค๋ฎค๋ํฐ๊ฐ ํ๋ฐํด์ ๋ฌธ์ ํด๊ฒฐ์ด ์ฉ์ดํฉ๋๋ค.
์ ํจ์ค ๋จ์
โ ์ค์ ์ด ๋ณต์กํ๋ค
์ด๊ธฐ์ ์ค์นํ๊ณ ํ๋ฌ๊ทธ์ธ์ ์ค์ ํ๋ ๊ณผ์ ์ด ๋ณต์กํฉ๋๋ค. ๊ทธ๋์ Infrastructure as Code ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ๋ฉด ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ UI/UX๊ฐ ๋ถํธํ๋ค
๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ Jenkins ์ธํฐํ์ด์ค๊ฐ ์ง๊ด์ ์ด์ง ์์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๊ธฐ์ ์ด๋๊ฐ ๋ชจ๋ฅผ ๋ต๋ตํจ์ด ์์ ์ ์์ต๋๋ค. ์ ํํ ๊ฐ์ด๋๋ผ์ธ์ด ์์ด๋ ์ฌ์ฉํ๋๋ฐ์ ์์ด์ ์ด๋ ค์์ด ์์ ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ณ ์ Jenkins์๋ Blue Ocean ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํฉ๋๋ค. (๋ชจ๋ UI ์ ๊ณต)
โ ๋น๋ ์๋ ๋ฌธ์
Jenkins ์์ฒด๊ฐ ๋ฌด๊ฒ๊ณ , CI/CD ํ๋ก์ธ์ค๊ฐ ๋ง์ผ๋ฉด ์๋ฒ ๋ถํ๊ฐ ํฌ๋ฏ๋ก ์๋๊ฐ ๋๋ ค์ง๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ณ ์ Jenkins Agent ๋ถ์ฐ ๋น๋ ์ฌ์ฉ ๋๋ Kubernetes ๊ธฐ๋ฐ์ Jenkins๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
@Junesker
'CI & CD > Jenkins' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Jenkins] ๐ฅ๏ธ ์ ํจ์ค(Jenkins) ์ค์น ํ๊ธฐ / ์ ํจ์ค ์ค์น ๋ฐฉ๋ฒ / ์ ํจ์ค ์ค์ ํ๊ธฐ (0) | 2025.02.14 |
---|
๋๊ธ