pipeline {
agent any
environment {
//조직별 반드시 변경 해야 하는 부분
PROJECT = "csr"
GIT_URL = "http://gitlab.paas.smes-tipa.go.kr/csr/csr.git"
GIT_CREDENTIALS_ID = "csr-normal-cred"
ARTIFACTORY_CREDENTIAL_ID = "csr-normal-cred"
ARTIFACTORY_PATH = "csr-maven-dev"
SONARQUBE_TOKEN_ID = "csr-sonarqube-token"
PAASTA_CREDENTIAL_ID = "csr-normal-cred"
CF_ORG_NAME = "중소벤처24시스템_운영"
CF_SPACE_NAME = "사회적책임경영시스템"
//오류시 변경 해야 하는 부분
ARTIFACTS = "target/*.war"
JUNIT_REPORT = "**/target/surefire-reports/TEST-*.xml"
CF_API_URL = "https://api.paas.smes-tipa.go.kr"
CF_MANIFEST = "manifest.yml"
CF_SUBDOMAIN = "csr-dev"
CF_DOMAIN = "paas.smes-tipa.go.kr"
//기타
BRANCH = "master"
TAG = "0"
LAST_NUMBER = "0"
}
options {
disableConcurrentBuilds()
buildDiscarder(logRotator(numToKeepStr: "30", artifactNumToKeepStr: "30"))
timeout(time: 120, unit: 'MINUTES')
}
tools {
jdk "OpenJDK1.8"
maven "maven 3.6.3"
gradle "Gradle6.5"
}
stages {
//stage ('00-Start Alert') {
// steps {
// send build started notifications
//slackSend (color: '#FFFF00', message: "STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
// send to HipChat
//hipchatSend (color: 'YELLOW', notify: true, message: "STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
// send to email
//emailext (to: "cloudinfra@in-soft.co.kr", subject: "시작: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", body: """시작: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':
//Check console output at ${env.BUILD_URL}${env.JOB_NAME} [${env.BUILD_NUMBER}]""",
//recipientProviders: [[$class: 'DevelopersRecipientProvider']])
// }
//
stage("01-Checkout") {
steps {
git credentialsId: "${GIT_CREDENTIALS_ID}", url: "${GIT_URL}", branch: "${BRANCH}", poll: true, changelog: true
}
}
stage("02-Maven build") {
steps {
echo '02-Maven build ..'
sh 'mvn clean verify -DskipITs=false';
junit "${JUNIT_REPORT}"
archive "${ARTIFACTS}"
}
}
stage("03-Static Code Analysis") {
steps {
echo '03-Static Code Analysis..'
script {
withSonarQubeEnv(credentialsId: "${SONARQUBE_TOKEN_ID}", installationName: 'sonarcube8.3.1') {
sh 'mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar -Dsonar.host.url=http://sonarqube.paas.smes-tipa.go.kr:9000 -Dsonar.projectName=${PROJECT} -Dsonar.projectKey=${PROJECT}'
}
}
}
}
stage("04-Code Quality Gate") {
steps {
script {
def qualitygate = waitForQualityGate(abortPipeline: true, webhookSecretId: 'jenkin-sonarqube-webhook')
if (qualitygate.status != "OK") {
error "Pipeline aborted due to quality gate coverage failure: ${qualitygate.status}"
}
}
}
}
stage('05-Upload to Artifactory') {
steps {
echo '05-Upload to Artifactory..'
script {
def server = Artifactory.newServer url: "http://artifactory.paas.smes-tipa.go.kr:8082/artifactory", credentialsId: "${ARTIFACTORY_CREDENTIAL_ID}"
def uploadSpec = """{
"files": [
{
"pattern": "${ARTIFACTS}",
"target": "${ARTIFACTORY_PATH}/${PROJECT}-${BUILD_NUMBER}/",
"props": "Integration-Tested=Yes;Performance-Tested=No"
}
]
}"""
server.upload(uploadSpec)
}
}
}
stage('06-CF app deploy') {
steps {
echo '06-CF app deploy..'
script {
withCredentials([usernamePassword(credentialsId: "${PAASTA_CREDENTIAL_ID}", passwordVariable: 'passta_password', usernameVariable: 'passta_username')]) {
def lastSuccessfulBuildID = 0
def build = currentBuild.previousBuild
while (build != null) {
if (build.result == "SUCCESS")
{
lastSuccessfulBuildID = build.id //as Integer
break
}
build = build.previousBuild
}
//sh "cf login -a ${CF_API_URL} -u ${passta_username} -p ${passta_password} -o ${CF_ORG_NAME} -s ${CF_SPACE_NAME} --skip-ssl-validation"
//sh "cf push ${PROJECT}${BUILD_NUMBER} -f ${CF_MANIFEST}"
//sh "cf delete-route -f ${CF_DOMAIN} --hostname ${CF_SUBDOMAIN}"
//sh "cf map-route ${PROJECT}${BUILD_NUMBER} ${CF_DOMAIN} --hostname ${CF_SUBDOMAIN}"
//sh "cf unmap-route ${PROJECT}${lastSuccessfulBuildID} ${CF_DOMAIN} --hostname ${CF_SUBDOMAIN}"
//sh "cf logout"
}
}
}
}
}
//post {
// success {
//slackSend (color: '#00FF00', message: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
//hipchatSend (color: 'GREEN', notify: true, message: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
//emailext (to: "cloudinfra@in-soft.co.kr", subject: "성공: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", body: """성공: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':
//Check console output at ${env.BUILD_URL}${env.JOB_NAME} [${env.BUILD_NUMBER}]""", recipientProviders: [[$class: 'DevelopersRecipientProvider']])
// }
// failure {
//slackSend (color: '#FF0000', message: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
//hipchatSend (color: 'RED', notify: true, message: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
//emailext (to: "cloudinfra@in-soft.co.kr", subject: "실패: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", body: """실패: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':
//Check console output at ${env.BUILD_URL}${env.JOB_NAME} [${env.BUILD_NUMBER}]""", recipientProviders: [[$class: 'DevelopersRecipientProvider']])
// }
//}
}
Shell
복사