í°ì¤í 리 ë·°

ìì ì¤ì¹í Docker를 ì¬ì©í´ì Jenkins 컨í ì´ë를 ëìë³¼ê²ì´ë¤.
ì°ì ê·¸ ì¬ì´ ë´ ì»´í¨í°ë ìëì°ìì ë§¥ì¼ë¡ ë°ê¼ë¤ð¥³ êºíã í
macìì dockerì¤ì¹ë ê±°ì ë¤ì´ë¡ëë§ íë©´ ë ì ëë¡ ê°ë¨íë¯ë¡ ìì¸í ë¤ë£¨ì§ ìì ê²ì´ë¤ (캡ì³ë ë°ê¸° ì ì ì¤ì¹ ë¤ í´ë²ë¦¼;)
𥸠Jenkins?
Jenkinsë ìíí¸ì¨ì´ ê°ë°ìì ì§ìì íµí©(CI)ê³¼ ì§ìì ë°°í¬(CD)를 ëì주ë ì¤íìì¤ ìëí ìë²ì´ë¤.
í ë§ëë¡ ê°ë°, ë¹ë, í ì¤í¸, ë°°í¬ ê³¼ì ì ìëíí ì ìë¤.

CI/CDì ê°ë ì´ ë¯ì¤ë¤ë©´ ì´ë ê² ìê°í ì ìë¤.
ì½ë를 ë³ê²½í í ë§¤ë² ì§ì í ì¤í¸íê³ ë¹ëíê³ ìë²ì ì¬ë¦¬ë¤ ë³´ë©´, ìê°ë ì¤ë ê±¸ë¦¬ê³ ì¬ëì´ íë ì¼ì´ë ì¤ìê° ë§ìì§ ìë°ì ìë¤.
Jenkinsë ì´ë° ë²ê±°ë¡ì´ ìì ì ìëì¼ë¡ ì²ë¦¬í´ì£¼ë©°, ëë¶ì ê°ë°ìë¤ì ê°ë° 본ì°ì ì 무ì ì§ì¤í ì ìê² ëë¤.
ð Jenkinsì 주ì í¹ì§
1. íë¬ê·¸ì¸ ìì¤í
Jenkinsë ë¤ìí íë¬ê·¸ì¸ì ì§ìí´ì ê±°ì 모ë íê²½ì ë§ê² 커ì¤í°ë§ì´ì§ ê°ë¥. Git, Docker, kubernetes, Slack ë± ìë°± ê°ì§ í´ê³¼ íµí©ì´ ê°ë¥íë¤.
2. ì¹ ê¸°ë° UI
Jenkinsë ì§ê´ì ì¸ ì¹ ì¸í°íì´ì¤ë¥¼ ì ê³µí´ì ì¤ì ê³¼ ê´ë¦¬ê° ë¹êµì ì¬ì.
3. ë¬´ë£ ì¤íìì¤
ë§ì 기ì ê³¼ íìì ë¶ë´ ìì´ ëì í ì ìì.
âï¸ Jenkins ì¤ì¹
Jenkins를 ì¤ì¹íë ë°©ë²ì ì¬ë¬ ê°ì§ê° ìì§ë§, ê°ì¥ 기본ì ì¸ Docker를 ì´ì©í ì¤ì¹ ë°©ë²ì ìê°í©ëë¤.
1. Docker ì¤ì¹ëì´ìëì§ íì¸
docker --version

2. Jenkins ì¤í
docker run -d -p 8082:8080 -p 50000:50000 --name jenkins jenkins/jenkins:lts

ì¶í nginxì gitlabì 8080, 8081ì ëì¸ ê²ì´ê¸° ë문ì jenkinsë 8082ì port를 ì¬ì©íì.
-d : 컨í ì´ë를 백그ë¼ì´ëìì ì¤í
-p 8082:8080 : í¬í¸ë¥¼ ì§ì í¨. í¸ì¤í¸ í¬í¸ 8082, 컨í ì´ë ë´ë¶ í¬í¸ 8080 ì¬ì©. ì´ ë§¤íì íµí´, í¸ì¤í¸ 머ì ì 8082 í¬í¸ë¥¼ 컨í ì´ë ë´ë¶ì 8080 í¬í¸ì ì°ê²°íë¤.
-p 50000:50000 : ë ë¤ë¥¸ í¬í¸ë¥¼ ì§ì í¨. Jenkinsë ë¶ì° ë¹ë(Distributed Build)를 ì§ìíë©°, Jenkins Masterì Agent ë ¸ë ê°ì íµì ì 50000 í¬í¸ë¥¼ ì¬ì©. ì´ ë§¤íì íµí´ Jenkins Masterì Agentê° íµì í ì ìëë¡ ì¤ì íë¤.
--name jenkins : 컨í ì´ë ì´ë¦ì 'jenkins'ë¡
jenkins/jenkins:lts : ì¬ì©í ì´ë¯¸ì§ (â» lts : Long-Term Support. ìì ì±ê³¼ ì¥ê¸° ì§ìì ì ê³µíë Jenkins ë²ì )
3. Jenkins 컨í ì´ë ëìì¡ëì§ íì¸
docker ps

4. 컨í ì´ë ë´ë¶ì ì ìí´ì jenkins ì´ê¸° ë¹ë°ë²í¸ ë³µì¬
docker exec -it jenkins /bin/bash
cd /var/jenkins_home/secrets
cat initialAdminPassword

5. http://localhost:8082 ì ì í ë³µì¬í ë¹ë°ë²í¸ ì ë ¥

6. 기본 plugin ì¤ì¹ ë° User ë±ë¡




7. Jenkins ì¤ì¹ ìë£

ð Jenkins Trigger
Jenkinsìì ë¹ë를 í¸ë¦¬ê±°íë ë°©ë²ì ì¬ë¬ ê°ì§ê° ìë¤.
ê° íë¡ì í¸ì ì구ì¬íì ë°ë¼ ì í©í ë°©ìì ì ííì¬ ì¬ì©íë¤.
1. ìë í¸ë¦¬ê±°
- ì¬ì©ìê° Jenkins ì¹ UIìì ì§ì "Build Now" ë²í¼ì í´ë¦íì¬ ë¹ë를 ì¤í
- ì¤ì ë°©ë² :
- Jenkinsìì ìì (Job)ì ìì±íê±°ë ìì
- ë³ëì í¸ë¦¬ê±° ì¤ì ì´ íìíì§ ìì
- ì¬ì© ìì : ê°ë¨í í ì¤í¸ë ê°ë° íê²½ìì ì주 ì¬ì©
2. ì¹í (Webhook) ê¸°ë° í¸ë¦¬ê±°
- GitHub, GitLab, Bitbucket ë±ê³¼ ê°ì ìì¤ ì½ë ê´ë¦¬ ìì¤í
(SCM)ì´ ë³ê²½ ì¬íì ê°ì§íë©´ Jenkinsì ìì²ì ë³´ë´ ë¹ë를 ìì.
ì¦, ì ë°ì´í¸ ìê²¼ì! ì´ë¼ê³ jenkinsìê² ìë ¤ì¤ - ì¤ì ë°©ë² :
- Jenkinsìì SCM Polling ëë Webhook Trigger íë¬ê·¸ì¸ì íì±í
- íë¡ì í¸ ì¤ì ìì Gitlab/GitHub Trigger를 ì í
- Git Repositoryì ì¹í URLì ì¤ì : http://<JENKINS_URL>/github-webhook/ ëë http://<JENKINS_URL>/gitlab-webhook/
- ì¬ì© ìì : ì½ëê° push ëê±°ë merge ë ë ìëì¼ë¡ ë¹ë ìì
3. SCM Polling
- Jenkinsê° ì£¼ê¸°ì ì¼ë¡ ìì¤ ì½ë ì ì¥ì를 íì¸íì¬ ë³ê²½ ì¬íì´ ìì ê²½ì° ë¹ë를 ì¤í
ì¦, ì ë°ì´í¸ ìì´? ì ë°ì´í¸ ìì´? ì ë°ì´í¸ ìì´? ì ë°ì´í¸ ìì´? ì ë°ì´í¸ ìì´? ë¼ê³ jenkinsìê² ë¬¼ì´ë´ - ì¤ì ë°©ë² :
- ìì (Job) ì¤ì íë©´ìì Build Triggers → Poll SCM ì í
- í´ë§ 주기를 í¬ë¡ ííìì¼ë¡ ì
ë ¥
ex) H/5 * * * * #5ë¶ë§ë¤ ì²´í¬
- ì¬ì© ìì : ì¹í ì¤ì ì´ ì´ë ¤ì´ íê²½ì´ë íë¡ì í¸ ì´ê¸°ì 커ë°ì´ êµì¥í ì주 ë°ìí ë
4. 기í
ì´ ì¸ìë Cron Scheduleì ì´ì©í í¸ë¦¬ê±°, ë¤ë¥¸ ìì ì¼ë¡ë¶í° í¸ë¦¬ê±°, Jenkins REST API를 íµí í¸ë¦¬ê±°, Pipeline ë´ë¶ìì ë¤ë¥¸ ìì ì í¸ë¦¬ê±°íë ë±...
ìí©ì ë°ë¼ ì´ë¤ ë°©ìì ì¸ ê±´ì§ ì ì íí´ì¼ íë¤.
âï¸ Jenkins Pipeline

Jenkins Pipelineì í¬ê² ë ê°ì§ ííê° ìë¤.
1. Declarative Pipeline : ìì±ì´ ì½ê³ ê°ë ì±ì´ ì¢ìì ë§ì´ ì¬ì©ë¨
2. Scripted Pipeline : ë¬ë커ë¸ê° ìì§ë§ ë ë§ì 기ë¥ì ì ê³µí¨
ì´ ë íí ì¤ ì¡°ê¸ ë ì주 ì°ì´ë ê±´ Declarative Pipelineì´ë¤.
Declarative Pipelineì 4ê°ì§ 주ì ììì¼ë¡ ëëê³ , groovyì¸ì´ë¥¼ ì¬ì©íë¤.
- agent
- stages
- steps
- post
âï¸ agent
agnetë ë¨ìí Jenkins ìì ì ì¤íí íë¡ì¸ì¤ë¤.
기본ì ì¼ë¡ agent anyê° ì ê³µëë¯ë¡ ë³ëë¡ agent ì¤ì ì íì§ ììë ìì ì´ ê°ë¥íë¤.
ê·¸ë°ë° agentë Jenkins ìë²ê° ìë 머ì ììë§ ëìíë ê² ìë. SSH ê°ì ë°©ìì¼ë¡ ì격ììë ëìíëë¡ ì¤ì í ì ìë¤.
agentì¤ì ì labelì´ë¼ë ë³ì¹ë ì¤ ì ìì¼ë©°, ìëì²ë¼ 'my-agent'ë¡ í¹ì agent를 ì§ì í ì ìë¤.
agent { label 'my-agent' }
âï¸ steps
stepsë ì¤ì ìì ì ë´ê³ ìë ë¸ë¡ì´ë¤.
steps ìì ëª ë ¹ í ì¤ í ì¤ì´ stepì´ë¼ê³ ë³´ë©´ ëë¤.
steps ììì script를 ì¬ì©íë ¤ë©´ Scripted Pipeline 문ë²ì ë¶ë¶ì ì¼ë¡ ì¬ì©í ì ìë¤. (â» ê·¸ë ë¤ê³ scripted 문ë²ì ì§ëì¹ê² ë§ì´ ì¬ì©íë©´ Declarative Pipelineì ì¥ì ì¸ ê°ë ì±ì´ ë¨ì´ì§ ì ìì !!!)
steps {
echo 'Hello World'
script {
def browsers=['chrome', 'firefox']
for (int i=0;i<browsers.size();++i){
echo "Testing the ${browsers[i]} browser"
}
}
}
âï¸ post
postë íì²ë¦¬ ìì ì ìí ë¸ë¡ì´ë¤.
postë¸ë¡ì pipelineì´ë stageë 벨ì ë¶ì´ê³ , ë´ë¶ìë post-condition ë¸ë¡ì ì¤ì í ì ìë¤.
ì´ ë¸ë¡ì ë°ë¡ ì ìì ì ê²°ê³¼ì ë°ë¼ ì¤í ì¬ë¶ë¥¼ ê²°ì í¨.
pipeline{
agent any
stages {
stages('Example') {
steps {
echo 'Hello World'
}
post {
success {
echo 'success' # ì steps ì ë¶ ì±ê³µíë©´ ì¤í
}
failure {
error 'failure' # stepsìì íëë¼ë ì¤í¨íë©´ ì¤í
}
}
}
}
post {
always {
echo 'I will always say Hello again!' # stages ëëê³ ë°ëì ì¤í
}
}
}
â» post-condition ë¸ë¡â
- success : ìì ì´ ëª¨ë ì±ê³µíì ë ì¤í
- failure : ìì ì¤ íëë¼ë ì¤í¨íë©´ ì¤í
- always : ìì ê²°ê³¼ì ìê´ìì´ íì ì¤í
- changed : íì¬ ë¹ëì ìíê° ì´ë² ë¹ëì ìíì ë¬ë¼ì¡ë¤ë©´ ì¤í
- unstable : íì¬ ë¹ëì ìíê° ë¶ìíë¤ë©´ ì¤í
ð Jenkins íì© í
- Slack ì림 ì°ë
- Slack íë¬ê·¸ì¸ì ì¤ì¹íë©´ ë¹ë ìí를 íììê² ì¤ìê° ê³µì ê°ë¥
- ì´ ì¼ë§ë í¸í ì¸ìì¸ê° ,, (ê·¼ë° ì°ë¦¬ íì¬ë ì ì¨ì ì°ë 못í´ë´ ã ì¸ì ê° ì°ê² ì§)
- ë³ë ¬ ë¹ë
- ì¬ë¬ ìì ì ëìì ì²ë¦¬í´ì¼ íë¤ë©´, íì´íë¼ì¸ìì ë³ë ¬ ë¨ê³ë¥¼ íì©í ì ìì
- ë¤ìì íë¡ì í¸ë¥¼ ëìë¹ëí ë ì주ì주ì주 ì긴íê² íì©í¨. ë¹ëìëì ê´ë ¨ ìì
- ë³´ì ì¤ì
- Jenkinsë 기본ì ì¼ë¡ ë구ë ì ê·¼ ê°ë¥í ìíë¡ ì¤íë기 ë문ì ê¼ ê´ë¦¬ì ê³ì ê³¼ ì ê·¼ ê¶íì ì¤ì
'Programming > DevOps' ì¹´í ê³ ë¦¬ì ë¤ë¥¸ ê¸
| [Linux] 리ë ì¤ íê²½ìì suì sudoì ì°¨ì´ì (0) | 2024.12.11 |
|---|---|
| [Docker] ë커 ì¤í ë¦¬ì§ ë§ì´í¸ & ë커 ì»´í¬ì¦ (5) | 2024.11.01 |
| [Docker] ë커 ëª ë ¹ì´ : 커맨ë ë° ìµì (3) | 2024.11.01 |
- ë°ê°ìµëë¤. ê¸ì 구ì±ê³¼ íë¦ì´ ë§¤ì° ìì°ì¤ë¬ì ìµëë¤.â¯
- ë¤ë ë¤ ê°ëë¤~ ì½ë ë´ë´ 몰ì íì´ì. ììì ìë¯¸ë¡ â¯
- ë°ë»í ì´ì¼ê¸° ëë¶ì íë£¨ê° ë ì¦ê±°ìì¡ì´ì. ê°ì¬í©ëâ¯
- ê¸ì´ ì°¸ ê¹ì´ê° ìë¤ì. ê°ì ê³¼ ë ¼ë¦¬ê° ì ì¡°í를 ì´ë¤â¯
- Total
- 1,011
- Today
- 0
- Yesterday
- 5
- subset
- Retrofit2
- DevOps
- docker
- ìê³ ë¦¬ì¦
- docker-compose
- BOJ
- BFS
- EffectiveJava
- IMAGE
- ìì´í 61
- ì¡°í©
- OS
- ìì´í 59
- ì´ìì²´ì
- springboot
- ë°±ì¤
- Java
- ìì´
- ì´íí°ë¸ìë°
- ê·¸ëííì
- ìì´í 60
- bruteforce
- cicd
- ìì íì
- dp
- dfs
- Container
- í í°ê¸°ë°ì¸ì¦
- ìí
