1) jenkins 설치 및 jenkins 컨테이너에 docker-ce 설치
- 현재 구조가 EC2 서버에 docker로 jenkins를 설치했다. 그리고 나서 jenkins를 통해서 이미지 빌드 및 컨테이너 생성 작업을 하는데, jenkins를 통해서 해야 하기 때문에 jenkins 안에 docker를 설치를 해주어야 한다.
이 점을 간과하였고, 그래서 결국 전에 만든 jenkins 컨테이너를 지우고 다시 설치했다. \
- jenkins 이미지를 통해 컨테이너 설치
docker run -p 8180:8080 -v /var/run/docker.sock:/var/run/docker.sock --name jenkins jenkins/jenkins:lts
- root 접속
docker exec -it -u root jenkins bash
- apt 명령어 실행 : docker apt repo 구성 및 docker ce 바이너리 설치하는 명령어 입력
apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce
- docker jenkins에서 host docker 접근 권한 부여
groupadd -f docker
usermod -aG docker jenkins
chown root:docker /var/run/docker.sock
[Docker] 도커 컨테이너에서 도커 이미지 빌드 (with jenkins)
발단 docker 환경에서 jenkins를 이용하여 pipeline구축 시 docker 이미지를 빌드해야하는 경우가 생긴다. 이때 jenkins를 docker로 실행시키지 않는다면 권한 부여만으로 해결이 가능하지만 jenkins를 docker이
kanoos-stu.tistory.com
2. jenkins 세팅
- 설치한 plugin : nodejs
1) Dashboard > Jenkins 관리 > Tools > NodeJS
- 작업했던 node 버전 맞추기
2) Dashboard > Jenkins 관리 > System > GitHub
- credential 만들 때 주의 사항
- username with password 선택했어도 password에는 Personal access tokens가 들어가야 한다!
- 만약에 안될 경우, username with password 대신 secret text에 Personal access tokens을 넣으면 된다.
3. jenkins pipeline 생성
- 스크립트의 경우, 수동으로 docker를 사용해서 했을 때의 명령어를 그대로 입력해주었다.
pipeline {
agent any
environment {
GIT_URL = "https://github.com/nyangnyanggompeng/back-end.git"
}
stages {
stage('Stop') {
steps {
sh 'docker stop nyangnyanggompeng'
sh 'docker rm nyangnyanggompeng'
}
}
stage('Pull') {
steps {
git url: "${GIT_URL}", branch: "dev", poll: true, changelog: true
}
}
stage('Build') {
steps {
sh 'docker build -t nyangnyanggompeng/node .'
}
}
stage('Deploy') {
steps{
sh 'docker run -d --name nyangnyanggompeng -p 3000:3000 nyangnyanggompeng/node'
}
}
stage('Finish') {
steps{
sh 'docker images -qf dangling=true | xargs -I{} docker rmi {}'
}
}
}
}
Crispy's Blog
crispyblog.kr
여기까지 진행하면 jenkins 페이지에서 빌드 버튼을 눌러서 수동 배포가 가능하다!
여기에 추가로 github과 연결하여 특정 branch에 push가 되는 걸 webhook이 잡아내서 push하면 자동으로 배포할 수 있도록 해주었다.
4. webhook 세팅
- Jenkins와 Github이 연동이 되어있다는 가정으로 시작
- Jenkins 설정
- 설치한 plugin : github integration
- Jenkins-pipeline (Jenkins Item) > 구성 > 빌드 유발 > GitHub hook trigger for GITScm polling 체크 후 저장
- GitHub 설정
- GitHub Repository > Settings > Webhooks > Add Webhook 선택 > Payload URL에 Jenkins 링크 등록
- 이 때 반응을 탐지하고자 하는 Repository가 Public으로 설정이 되어 있어야 함!!!
여기까지 진행하면 자동 배포까지 완료!
하지만,, 문제는 그 뒤에 있었으니ㅜㅜ
+추가)
5. discord로 build 결과 알림 보내기
- Discord Notifier Plugin 설치
- Pipeline Script에 추가
post {
success {
discordSend description: "Jenkins CI/CD Trigger Alarm",
footer: "BE Build 성공!",
link: env.BUILD_URL, result: currentBuild.currentResult,
title: "Nyangnyanggompeng",
webhookURL : env.WEBHOOK_URL
}
failure {
discordSend description: "Jenkins CI/CD Trigger Alarm",
footer: "BE Build 실패",
link: env.BUILD_URL, result: currentBuild.currentResult,
title: "Nyangnyanggompeng",
webhookURL : env.WEBHOOK_URL
}
}
· WEBHOOK_URL은 알람을 보낼 discord url을 뜻한다!
[CI/CD] Jenkins Trigger 정보 Discord로 보내기
젠킨스 마스터 COUPANG www.coupang.com "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다." 🗂 목차 ⚠️ 아래 목차 중 몇몇개의 링크가 걸리지 않는 문제로
junyharang.tistory.com
'[프로젝트] 냥냥곰펭' 카테고리의 다른 글
[BE] 4. HTTPS 적용하기 (0) | 2023.07.29 |
---|---|
[BE] OpenAI 401 Error 해결 (0) | 2023.07.14 |
[BE] CI/CD 도전! (0) | 2023.07.14 |
[BE] Docker 용량 문제 (0) | 2023.07.12 |
[BE] 3. Jenkins CI/CD 세팅 (0) | 2023.07.07 |