[Jenkins] pipeline script 작성

bbbbbhyun·2025년 9월 14일

DevOps & Cloud

목록 보기
13/29

빌드 자동화

pipeline {
  agent any

  stages {
    stage('Git Clone Project') {
      steps {
        git branch : 'master',
        url : 'https://github.com/kangbohyeon/guestbook.git'
      }
    }
    stage('Project Build') {
      steps {
        sh "./mvnw -Dmaven.test.failure.ignore=true clean package"
      }
    }

  }
}

Junit Test

    stage('Project Test') {
      steps {
        sh "./mvnw test"
      }
      post {
        always {
                junit '**/target/surefire-reports/TEST-*.xml'
            }
        }
    }

SonarQube 설정

  1. Manually 클릭

  1. Project display name, Project key, Main branch name 작성 후 Set Up 클릭

  2. Locally 클릭

  1. Token name, Expires in 작성 및 선택 후 Generate 클릭

  1. 발행된 토큰 잘 저장해놓기 -> Continue클릭

  1. 생성된 Token을 기반으로 분석을 진행하기 위한 sonar.login 키를 제공

  1. Jenkins Webhook 등록
    Administration > Configuration > Webhooks > Create 클릭

Name , Url 작성후 Create클릭

  1. SonarQube Server 등록
    Jenkins 관리 > System > SonarQube servers > “Add SonarQube” > Name, Server Url 작성 > Add 클릭 > Secret text 선택 > Secret에 SonarQube 토큰 입력 > Id, Description 작성 > Add 클릭 > Server authentication token에 방금 만든 토큰 선택 > Save 클릭

  1. SonarQube Scanner 등록
    Jenkins 관리 > Tools > SonarQube Scanner > “Add SonarQube Scanner” > Name 작성 후 Save 클릭

  1. Jenkins script 작성
stage('SonarQube Analysis') {
      steps {
          withSonarQubeEnv('SonarQube-Server-Local'){
            sh '''
            ./mvnw clean verify sonar:sonar \
            -Dsonar.projectKey=guestbook \
            '''
          }
        }
    }
   stage('SonarQube Quality Gate') {
      steps {
        timeout(time: 10, unit: 'MINUTES') {
            script{
                def qg = waitForQualityGate()
                if(qg.status != 'OK') {
                    echo "NOT OK Status: ${qg.status}"
                    error "Pipeline aborted due to quality gate failure: ${qg.status}"
                } else{
                    echo "OK Status: ${qg.status}"
                }
            }
        }
    }
  }

Docker 설정

  1. docker image build
  2. docker image tag and registry push
import java.text.SimpleDateFormat

def VERSION = (new SimpleDateFormat("yyyyMMddHHmm")).format(new Date())

pipeline {
  agent any
  environment{
    DOCKER_REGISTRY="localhost:5001"
    LATEST_TAG="latest"
    IMAGE_NAME="guestbook"
  }

  stages {
    stage('Docker Image Build') {
      steps {
        sh 'docker build -t ${IMAGE_NAME}:${LATEST_TAG} -f Dockerfile .'
      }
    }
  stage('Docker Image Tag') {
      steps {
        sh "docker tag ${IMAGE_NAME} ${DOCKER_REGISTRY}/${IMAGE_NAME}:${VERSION}"
        sh "docker tag ${IMAGE_NAME} ${DOCKER_REGISTRY}/${IMAGE_NAME}:${LATEST_TAG}"
      }
    }
    
  stage('Docker Image Push') {
      steps {
        sh "docker image push ${DOCKER_REGISTRY}/${IMAGE_NAME}:${VERSION}"
        sh "docker image push ${DOCKER_REGISTRY}/${IMAGE_NAME}:${LATEST_TAG}"
      }
    }
    
  }
}

docker registry 확인하는 방법

curl http://localhost:5001/v2/_catalog
curl http://localhost:5001/v2/guestbook/tags/list

slack 연결

앱관리 선택 -> -> -> ->

Jenkins CI 검색 -> Slack에 추가 클릭 -> 채널 선택 -> Jenkins CI 통합 앱 추가 클릭

팀 하위 도메인, 통합 토큰 자격 증명ID 별도로 저장

설정 저장 클릭

Dashboard -> Jenkins관리 -> 시스템 설정 -> Slack -> workspace에 팀하위 도메인 작성 -> add 클릭 -> Test connection 클릭 -> success 뜨면 Save 클릭

Secret text 선택 -> Secret에 통합 토큰 자격 증명 ID 작성, ID, Descript 작성 후 Add 선택

정상적이면 다음과 같이 뜸

stages 밑에 코드 작성

post { 
        success { 
            slackSend(tokenCredentialId: 'slack-token-local'
                , channel: '#일반'
                , color: 'good'
                , message: "${JOB_NAME} (${BUILD_NUMBER}) 빌드가 성공적으로 끝났습니다. Details: (<${BUILD_URL} | here >)")
        }
        failure { 
            slackSend(tokenCredentialId: 'slack-token-local'
                , channel: '#일반'
                , color: 'danger'
                , message: "${JOB_NAME} (${BUILD_NUMBER}) 빌드가 실패하였습니다. Details: (<${BUILD_URL} | here >)")
    }
  }

profile
BackEnd developer

0개의 댓글