[Jenkins] Pipeline Job 만들기

이준섭·2023년 8월 18일

Jenkins

목록 보기
3/3
post-thumbnail

Dashboard -> 새로운 item -> Pipeline으로 Job 만들기

1. Build 매개변수 추가

이 빌드는 매개변수가 있습니다. 체크후 Git Parameter 선택


Name -> 매개변수 이름
Default Value -> 개발 서버 일때는 develop, 스테이지 & 메인 서버일때는 main
Branch Filter -> Github Branch 필터

2. Webhook 설정

- Build Triggers 에서 Generic Webhook Trigger 체크

- Post Content parameters 체크 후 아래와 같이 설정

- Token 설정

※ {현재 서비스 이름}-{profile}

- Optional Filter 설정

위에서 설정한 parameter을 Filtering 한다.


※ 위 Expression은 develop 브랜치만 가져오게 설정 main으로 교체 가능

- Github에 Webhook 등록

Github → 해당 서비스 → Settings → Webhooks → Add webhook

Payload URL에
http://Jenkins ip:port/generic-webhook-trigger/invoke?token={위에서 설정한 토큰} 으로 설정하고
위와 같이 설정후 add

3. Pipeline Script 추가

pipeline {
    environment {
        docker_name = "Repository 명"
        -- Docker Name 앞에 Profile 추가 (Prod는 추가 안함)
        docker_registry = "$docker_id/dev-$docker_name"
        version = "${env.BUILD_NUMBER.toInteger() + 1000}"
        docker_id = 'Docker Hub ID'
        docker_pw = 'Docker Hub PW'
    }
    triggers {
       githubPush()
    }
    agent any
    stages {
        stage('Start') {
            steps {
                slackSend (channel: '#배포', color: '#FFFF00', message: "STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
            }
        }
        stage('Clone sources') {
            steps {
                echo 'Clone'
                git branch: '${BRANCH}', credentialsId: 'jslee', url: 'GitHub Repository URL'
            }
        }
        stage('Build Jar') {
            steps {
                sh 'chmod 777 gradlew'
                sh './gradlew build -x test'
            }
        }
        stage('Docker Image Build') {
            steps{
                sh "docker build --no-cache -t $docker_registry:$version ."
            }
        }
        stage('Deploy docker image') {
            steps {
                sh 'docker login -u $docker_id -p $docker_pw'
                sh "docker push $docker_registry:$version"
            }
        }
        stage('Clean docker image') {
            steps{
                sh "docker rmi $docker_registry:$version"
                sh "docker volume prune -f"
            }
        }
    }
    post {
        success {
            slackSend (channel: '#배포', color: '#00FF00', message: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
        }
        failure {
            slackSend (channel: '#배포', color: '#FF0000', message: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
        }
    }
}

0개의 댓글