본문 바로가기

[프로젝트] 냥냥곰펭

[BE] CI/CD / 배포 / webhook

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