[Dining-together] MSA 환경 네이버 클라우드 서버에 Jenkins multi branch pipeline 을 이용해 빌드 테스트 docker 배포하기 자동화 (2)

Jifrozen·2021년 7월 17일
0

Dining-together

목록 보기
17/25

MSA 환경 네이버 클라우드 서버에 Jenkins multi branch pipeline 을 이용해 빌드 테스트 docker 배포하기 자동화 (2)

도커로 젠킨스 실행

mkdir /docker/jenkins

docker run -d \
--name my_jenkins \
-p 8080:8080 \
-v /docker/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose \
-u root jenkins/jenkins:jdk11

나는 jdk11이기 때문에 jdk11이 설정된 젠킨스 이미지를 실행했다.

젠킨스 설정

https://velog.io/@jifrozen/Dining-together-네이버-클라우드-플랫폼-Jenkins-maven-빌드-테스트-자동화-2-네이버-클라우드-플랫폼으로-jenkins-서버-만들기
이전글을 참고해 젠킨스 설정했다.

젠킨스 도커허브 연결

https://ryu-e.tistory.com/12
이 글을 참고했다.

node {
        withCredentials([[$class: 'UsernamePasswordMultiBinding',
        credentialsId: 'docker-hub',
        usernameVariable: 'DOCKER_USER_ID',
        passwordVariable: 'DOCKER_USER_PASSWORD']])
        {
        try{
            // Checkout Git reporitory
            stage('Checkout Git') {
                    checkout scm
                    echo 'Git Checkout Success!'
            }
            // Build reporitory using Maven tool
            stage('Build eureka') {
                    def mvnHome = tool 'Maven'
                    sh "cd eureka && ${mvnHome}/bin/mvn -Dmaven.test.failure.ignore clean compile package"
            }
            stage('Build gateway') {
                    def mvnHome = tool 'Maven'
                    sh "cd gateway && ${mvnHome}/bin/mvn -Dmaven.test.failure.ignore clean compile package"
            }
            stage('Build member') {
                    def mvnHome = tool 'Maven'
                    sh "cd member && ${mvnHome}/bin/mvn -Dmaven.test.failure.ignore clean compile package"
            }
            stage('Build auction') {
                    def mvnHome = tool 'Maven'
                    sh "cd auction && ${mvnHome}/bin/mvn -Dmaven.test.failure.ignore clean compile package"
            }
            stage('Build search') {
                    def mvnHome = tool 'Maven'
                    sh "cd search && ${mvnHome}/bin/mvn -Dmaven.test.failure.ignore clean compile package"
            }

            // Unit Test using Junit and archive results for analysis
            stage('Unit Test'){
                    junit '**/target/surefire-reports/TEST-*.xml'
            }
         slackSend (channel: '#jenkins', color: '#00FF00', message: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
        }catch(e){
            slackSend (channel: '#jenkins', color: '#FF0000', message: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
        }
        stage('Build image') {
            //     when {
            //     branch 'main'
            // }steps{

                sh(script: 'docker build -t ${DOCKER_USER_ID}/eureka:${BUILD_NUMBER} eureka')
                sh(script: 'docker build -t ${DOCKER_USER_ID}/gateway:${BUILD_NUMBER} gateway')
                sh(script: 'docker build -t ${DOCKER_USER_ID}/member:${BUILD_NUMBER} member')
                sh(script: 'docker build -t ${DOCKER_USER_ID}/auction:${BUILD_NUMBER} auction')
                sh(script: 'docker build -t ${DOCKER_USER_ID}/search:${BUILD_NUMBER} search')
            // }
        }

        stage('Push') {
            //     when {
            //     branch 'main'
            // }steps{
                sh(script: 'docker login -u ${DOCKER_USER_ID} -p ${DOCKER_USER_PASSWORD}')
                sh(script: 'docker push ${DOCKER_USER_ID}/eureka:${BUILD_NUMBER}')
                sh(script: 'docker push ${DOCKER_USER_ID}/gateway:${BUILD_NUMBER}')
                sh(script: 'docker push ${DOCKER_USER_ID}/member:${BUILD_NUMBER}')
                sh(script: 'docker push ${DOCKER_USER_ID}/auction:${BUILD_NUMBER}')
                sh(script: 'docker push ${DOCKER_USER_ID}/search:${BUILD_NUMBER}')
            // }
             }

        stage('Deploy') {

                sh "docker run -d -p 8761:8761 --network Dining-together\
                        --name eureka ${DOCKER_USER_ID}/eureka:${BUILD_NUMBER}"
                sh "docker run -d -p 8000:8000 --network Dining-together  --name gateway -e \"eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/\" ${DOCKER_USER_ID}/gateway:${BUILD_NUMBER}"
                sh "docker run -d --network Dining-together \
                  --name member \
                -e \"eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/\" \
                ${DOCKER_USER_ID}/member:${BUILD_NUMBER}"
                sh "docker run -d --network Dining-together \
                  --name auction \
                -e \"eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/\" \
                ${DOCKER_USER_ID}/auction:${BUILD_NUMBER}"
                sh "docker run -d --network Dining-together \
                  --name search \
                -e \"eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/\" \
                ${DOCKER_USER_ID}/search:${BUILD_NUMBER}"

             }

    }
}

이전 로컬 환경에서 실행했던 명령어이다.
slackSend (channel: '#jenkins', color: '#00FF00', message: "SUCCESSFUL: Job 'env.JOBNAME[{env.JOB_NAME} [{env.BUILD_NUMBER}]' (${env.BUILD_URL})")
슬랙 알림 multibranch pipeline 환경에서 보냈다.


공인ip:8761(유레카 포트넘버) 제대로 나왔다.


postman으로 테스트 했더니 회원가입도 잘된다.


나도 젠킨스와 도커 조합은 처음이기 때문에 정말 브랜치 하나를 파서 막무가내로 테스트를 했다...ㅋㅋㅋㅋ...보통 jsnkins 테스트를 어떻게 진행하는지 궁금하다.

도커 컴포즈 파일로 관리하고 싶은데 로컬환경에서는 잘되는데 jenkins에서는 docker compose permission denied 가 된다...4시간동안 하다 그냥 포기했다

자동 빌드 테스트 배포를 하고 바로 글을 올리고 싶었는데 한이음 중간보고서 작성이 겹쳐서 조금 바빳다. 그래서 기억을 더듬어 올렸는데 빼먹은 부분이 있을수도 있다...(출처도 엄청 많은 글을 봤는데..)

출처

https://ryu-e.tistory.com/12 ( 도커 허브 참고 )
도커 명령어 (인프런 도커 참고서 강의)
https://olive-devlog.tistory.com/1 (슬랙 알림)

0개의 댓글