pipeline {
agent { label 'wing-node-large' }
environment {
REDIS_PORT = getRandomPort()
MONGO_PORT = getRandomPort()
ECR_URI = '633349536424.dkr.ecr.cn-north-1.amazonaws.com.cn'
SONARQUBE_BASE_URL='https://sonarqube.syriusrobotics.cn'
INTERFACE_DOCUMENT_URL='https://confluence.syriusrobotics.cn/x/p15GAQ'
}
stages {
stage('RealCheckout') {
steps {
checkout([$class : 'RepoScm',
repoUrl : 'ssh://jenkins@gerrit.syriusrobotics.cn:29418/git-repo',
manifestRepositoryUrl: 'ssh://jenkins@gerrit.syriusrobotics.cn:29418/manifests',
manifestBranch : 'master',
manifestFile : 'flexgalxy/templar/task_service.xml',
currentBranch : false,
forceSync : true])
checkout([$class : 'GitSCM',
userRemoteConfigs: [[url: 'ssh://jenkins@gerrit.syriusrobotics.cn:29418/devops/continuous_integration']],
branches : [[name: '*/master']],
extensions : [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'continuous_integration']]
])
}
}
stage('Download') {
steps {
sh '''#!/bin/bash
set -x
./continuous_integration/scripts/syrius_download \
--project $GERRIT_PROJECT \
--change-number $GERRIT_CHANGE_NUMBER \
--patch-set $GERRIT_PATCHSET_NUMBER
'''
}
}
stage('Build') {
steps {
withCredentials([usernamePassword
(
credentialsId: 'maven-credencials',
usernameVariable: 'username',
passwordVariable: 'password'
)]) {
sh '''
docker run --rm --add-host=maven.syriusrobotics.cn:161.189.43.115 --net=host -P -v $PWD/src:/home/gradle/project -v /home/ubuntu/jenkins-data/gradle/.gradle:/home/gradle/.gradle -v /home/ubuntu/jenkins-data/maven/.m2:/root/.m2 -w /home/gradle/project/task_service_parent gradle gradle build -i --stacktrace -x test -PbuildNumber=$BUILD_NUMBER -PmavenUsername=$username -PmavenPassword=$password
'''}
}
}
stage('Run Test') {
steps {
withCredentials([usernamePassword
(
credentialsId: 'maven-credencials',
usernameVariable: 'username',
passwordVariable: 'password'
)]){
sh '''
docker run -p $REDIS_PORT:6379 --name ci_redis_$REDIS_PORT -d redis
docker run -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=example -p $MONGO_PORT:27017 --name ci_mongo_$MONGO_PORT -d mongo
docker run --rm --add-host=maven.syriusrobotics.cn:161.189.43.115 --net=host -P -v $PWD/src:/home/gradle/project -v /home/ubuntu/jenkins-data/gradle/.gradle:/home/gradle/.gradle -v /home/ubuntu/jenkins-data/maven/.m2:/root/.m2 --env REDIS_PORT=$REDIS_PORT --env MONGO_PORT=$MONGO_PORT -w /home/gradle/project/task_service_parent gradle gradle -i --stacktrace clean test jacocoTestReport -PbuildNumber=$BUILD_NUMBER -PmavenUsername=$username -PmavenPassword=$password
docker stop ci_redis_$REDIS_PORT
docker rm ci_redis_$REDIS_PORT
docker stop ci_mongo_$MONGO_PORT
docker rm ci_mongo_$MONGO_PORT
'''}
}
}
stage('Build artifacts ') {
steps {
withCredentials([usernamePassword
(
credentialsId: 'maven-credencials',
usernameVariable: 'username',
passwordVariable: 'password'
)]) {
sh '''
docker run --rm --net=host -P -v $PWD/src:/home/gradle/project -v /home/ubuntu/jenkins-data/gradle/.gradle:/home/gradle/.gradle -v /home/ubuntu/jenkins-data/maven/.m2:/root/.m2 -w /home/gradle/project/task_service_parent gradle:jdk14 gradle clean build -x test -PbuildNumber=$BUILD_NUMBER -PmavenUsername=$username -PmavenPassword=$password
'''
}
}
}
stage('Build Docker Image To ECR') {
steps {
sh '''#!/bin/bash
set -e
aws ecr get-login-password --region cn-north-1 | docker login --username AWS --password-stdin ${ECR_URI}
'''
buildImageAndPush('./src/task_service/', env.ECR_URI+"/flex-galaxy/templar/task-service")
buildImageAndPush('./src/order_task_schedule_service/', env.ECR_URI+"/flex-galaxy/templar/order-schedule")
}
}
}
post {
always{
pushOrderScheduleResultToPulse()
pushTaskServiceResultToPulse()
}
}
}
def buildImageAndPush(path,imageName) {
def version = getVersion()
echo version
def image = docker.build(imageName + ":" + version, path)
image.push()
}
def pushOrderScheduleResultToPulse(){
def version = getVersion()
build job: 'push_result_to_pulse_patches', propagate: true, wait: false, parameters: [
[$class: 'StringParameterValue', name: 'projectName', value: "flexgalaxy-templar-order-schedule"],
[$class: 'StringParameterValue', name: 'artifactName', value: "order-schedule-${version}"],
[$class: 'StringParameterValue', name: 'testReportUrl', value: "${SONARQUBE_BASE_URL}/code?id=task_service_parent&selected=task_service_parent%3Aorder_task_schedule_service%2Fsrc"],
[$class: 'StringParameterValue', name: 'pulseType', value: "UpdateArtifactsTestResult"],
[$class: 'StringParameterValue', name: 'currentEnv', value: "UT"],
[$class: 'StringParameterValue', name: 'buildResult', value: "${currentBuild.result}"],
]
}
def pushTaskServiceResultToPulse(){
def version = getVersion()
build job: 'push_result_to_pulse_patches', propagate: true, wait: false, parameters: [
[$class: 'StringParameterValue', name: 'projectName', value: "flexgalaxy-templar-task-service"],
[$class: 'StringParameterValue', name: 'artifactName', value: "task-service-${version}"],
[$class: 'StringParameterValue', name: 'testReportUrl', value: "${SONARQUBE_BASE_URL}/code?id=task_service_parent&selected=task_service_parent%3Atask_service%2Fsrc"],
[$class: 'StringParameterValue', name: 'pulseType', value: "UpdateArtifactsTestResult"],
[$class: 'StringParameterValue', name: 'currentEnv', value: "UT"],
[$class: 'StringParameterValue', name: 'buildResult', value: "${currentBuild.result}"],
]
}
def getVersion(){
def buildVersion = readFile(file: 'src/task_service/build.version')
println(buildVersion)
def version = String.format("%s.%s",buildVersion, env.BUILD_NUMBER)
echo version
return version
}
def getRandomPort() {
def port = (int)(Math.random()*50000) + 10000
return port
}