pipeline {
agent any
parameters {
choice(name: 'ENV',  choices: 'stg\nins\nprod', description: 'Environment')
//string(name: 'TAG',  defaultValue: "", description: 'Image to Deploy')
}

environment {
artifactId = readMavenPom().getArtifactId()
version = readMavenPom().getVersion()
}

//tools {
//  maven 'Maven 3.5.2'
//  jdk 'JDK8'
//}

stages {
stage ('Unit Test') {
steps {
script {
mvn '-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true clean test'
}
step([$class: 'JacocoPublisher',
execPattern: 'target/*.exec',
classPattern: 'target/classes',
sourcePattern: 'src/main/java',
exclusionPattern: 'src/test*'
])
}
}
stage('SonarQube analysis') {
steps {
script {
mvn '-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true ' +
'-Dhttps.proxyHost=stb-dev-proxy.db.rakuten.co.jp -Dhttps.proxyPort=9501 ' +
'-Dsonar.projectKey=dsdapi-pitari ' +
'-Dsonar.host.url=https://ramen.rakuten-it.com/rmsj-sonar ' +
'-Dsonar.login=dsd-api ' +
'-Dsonar.password=Dsd-Api ' +
'-Dsonar.language=java ' +
'-Dsonar.coverage.exclusions=**/bean/**,**/entity/**,**/repository/**,**/constant/** ' +
'org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar'

checkQualityQate()
}
}
}
stage ('Build Artifact') {
steps {
script {
mvn '-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -DskipTests package'
}
}
}
stage ('Docker Build') {
steps {
script {
//mvn '-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true dockerfile:build'
IMAGE="dsd/${artifactId}:${version}"
app = docker.build("$IMAGE", '.')
rwasp.push (app)
}
}
} // DockerBuild
stage('Deploy') {
steps {
script {
def host_postfix = "-${params.ENV}"
def rwasp_env = "${params.ENV}-rwasp"
if ("${params.ENV}" == "prod" || "${params.ENV}" == "ins") {
host_postfix = ""
rwasp_env = "pro-rwasp-jpe2"
}
def domain_postfix = ""
if ("${params.ENV}" == "ins") {
domain_postfix = "-ins"
}
Map config = [
ENV : "${rwasp_env}",
IMAGE : "$IMAGE",
Deploy_LOCAL_ENV_CONF : "rwasp-conf/env-${params.ENV}.json",
Deploy_LOCAL_RUN_CONF : "rwasp-conf/runtime-${params.ENV}.conf",
Deploy_SERVICE_GROUP : 'dsd',
Deploy_OWNER : 'prj-ghp',
Switch_DOMAIN : "${artifactId}${domain_postfix}.rwasp${host_postfix}.hnd2.bdd.local",
TIME_OUT : 130
]
rwaspDeployV2 (config)
rwaspSwitchV3 (config)
}
}
}
} //stages
} //pipeline

def checkQualityQate() {
def CURL = "curl -X GET -x stb-dev-proxy.db.rakuten.co.jp:9501 -u dsd-api:Dsd-Api "
def props = readProperties file: 'target/sonar/report-task.txt'
def ceTaskUrl = props['ceTaskUrl']
sleep 5
sh "echo `curl -X GET -x stb-dev-proxy.db.rakuten.co.jp:9501 -u dsd-api:Dsd-Api ${ceTaskUrl}` > sonar_result.json"
def sonar_result = readJSON file: "sonar_result.json"
if (sonar_result.task.status != 'SUCCESS') {
error "Pipeline aborted due to sonarqube failure: ${sonar_result.status}"
}
def analysisId = sonar_result.task.analysisId
sh "echo `curl -X GET -x stb-dev-proxy.db.rakuten.co.jp:9501 -u dsd-api:Dsd-Api https://ramen.rakuten-it.com/rmsj-sonar/api/qualitygates/project_status?analysisId=${analysisId}` > gt_result.json"
def gt_result = readJSON file: "gt_result.json"
if (gt_result.projectStatus.status != 'OK') {
error "Pipeline aborted due to quality gate failure: ${gt_result.projectStatus.status}"
}
}
