@Library('global-shared-library') _
pipeline {
agent { label 'slave_node' } //容器环境发布节点(已预安装docker和helm等)
options{
disableConcurrentBuilds()
}
tools {
maven 'maven3.3.9' //maven 版本定义(可以不用预先安装,但是需要全局定义变量)
jdk 'jdk1.8_131' //可以不用预先安装,但是需要全局定义变量
}
parameters {
gitParameter branchFilter: 'origin/(.*)' , defaultValue: 'master' ,name: 'BRANCH', type: 'PT_BRANCH_TAG', useRepository: 'http://bitbucket.xxx.git' //选择将要构建的分支
//mvn 编译命令
extendedChoice description: '部署环境: \ntest \nsit \nuat \n生产环境:暂不提供 ', multiSelectDelimiter: ',', name: 'space', quoteValue: true, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'test27,test56,sit,sit53,uat', visibleItemCount: 10 //部署的环境选择框
}
environment {
//giturl
GIT_URL="http://bitbucket.xxx.git"
//部署包名称
testWarName='hermes-api.jar'
test27buildCommand='mvn clean package -pl xxx应用-api -am -Ptest27 -Dmaven.test.skip=true -U'
sit53buildCommand='mvn clean package -pl xxx应用-api -am -Psit53 -Dmaven.test.skip=true -U'
uatbuildCommand='mvn clean package -pl xxx应用-api -am -Puat -Dmaven.test.skip=true -U'
prodbuildCommand='mvn clean package -pl xxx应用-api -am -Pprod -Dmaven.test.skip=true -U'
graybuildCommand='mvn clean package -pl xxx应用-api -am -Pgray -Dmaven.test.skip=true -U'
//备份脚本
testBackupShellName='/xxx/sh/backup.sh'
devBackupShellName='/xxx/sh/backup.sh'
//部署脚本 backup stop and start
testDeployShellName='xxx.sh restart'
devDeployShellName='xxx.sh restart'
//servicename
servicename='xxx应用-api'
//微信通知 微信接收消息,多人接收xxx|xxxx
WEICHAT_RECEIVERS='xxx|xxx'
//upload repo
upload_repo="maven-pro/xxx应用-api"
//download path
download_path="xxx应用-api/target"
//传输目标目录
targetPath="/home/accountapp/deploy/app/xxx应用-api.jar"
//SCM中docker文件夹的路径
dockerDir="xxx应用/xxx应用-api/docker"
//制品库二进制包版本号
versionNum='V1.1'
helm_home='xxx/xxx应用-api' //chat包路径,等调试稳定后上传到harbor仓库中
}
stages {
stage('移动dockerfile'){
// when { expression { return ( params.test==false && params.dev==false )} }
steps {
script{
sh "rm -rf /tmp/${JOB_NAME}; mkdir /tmp/${JOB_NAME}; /bin/cp -rf ${env.dockerDir} /tmp/${JOB_NAME} "
}
}
}
stage('选择分支'){
steps {
echo "${WORKSPACE}"
git credentialsId: 'bitbucket',branch: "${params.BRANCH}", url: "${env.GIT_URL}"
}
}
stage("获取发布分支"){
steps{
//定义环境:此函数是用来去除分支名称上的”/“ ,在docker的tag上不能出现”/“
script{
env.BRANCHL=branchDeSlash(params.BRANCH)
}
}
}
stage("定义版本号"){
steps{
//定义版本号:
script{
def date=new Date().format("yyyy-MM-dd_HH_mm_ss")
def version="${date}-${env.servicename}-${env.BRANCHL}-${BUILD_NUMBER}"
echo "version:${version}"
env.versionN=version
}
}
}
stage("获取发布环境空间"){
steps{
//定义环境:
script{
def tempspace=params.space
tempspace=tempspace.replaceAll("\"","")
echo "\033[7m environments:${tempspace} \033[0m"
env.space=tempspace
}
}
}
stage("定义环境变量"){
steps{
script{
if ( "${env.space}" == "test27" ) {
env.space="test" //namespace
env.buildCommand=env.test27buildCommand
env.nodeport=31101
env.nodeport1=31103
}
if ( "${env.space}" == "test56" ) {
env.space="test-xxx应用"
env.buildCommand=env.test56buildCommand
env.nodeport=31104
env.nodeport1=31105
}
if ( "${env.space}" == "sit53" ) {
env.space="dev"
env.buildCommand=env.sit53buildCommand
env.nodeport=31106
env.nodeport1=31107
}
if ( "${env.space}" == "uat" ) {
env.space="uat"
env.buildCommand=env.uatbuildCommand
env.nodeport=31108
env.nodeport1=31109
}
if ( "${env.space}" == "sit" ) {
env.buildCommand=env.sitbuildCommand
env.nodeport=31110
env.nodeport1=31111
env.space="quasi-prod"
}
}
}
}
stage("生成制品包"){
steps {
script{
sh "${env.buildCommand}"
}
echo "编译 complete"
}
}
stage('构建镜像'){
// when { expression { return ( params.test==false && params.dev==false )} }
steps {
echo 'make docker images'
echo "${WORKSPACE}"
echo "${JOB_NAME}"
//Jenkins机器:编译完成后,build生成一个新版本的镜像,push到远程docker仓库
script{
sh "/bin/cp -rf /tmp/${JOB_NAME}/docker . "
sh " cd ${WORKSPACE}/docker && /bin/bash docker_build.sh ${WORKSPACE}/${download_path}/${testWarName} ${WORKSPACE}/docker ${env.versionN} app/${env.servicename} "
}
}
}
stage('deploy-test'){
steps{
script{
sh " helm repo update "
sh "cd ${helm_home};helm upgrade ${env.servicename} --install --set service.nodePort=${nodeport} --set service.nodePort1=${nodeport1} --set service.port=9011 --set service.port1=9012 --set image.tag='${env.versionN}' ./${servicename} -n ${env.space}" //测试时使用
}
echo "test deploy complete"
}
}
}
post {
success {
script{
sh "python /xxx/weixin.py \'${env.WEICHAT_RECEIVERS}\' '${currentBuild.fullDisplayName} Deploy Successed!' '${env.BUILD_URL}'"
}
}
failure {
script{
sh "python /xxx/weixin.py \'${env.WEICHAT_RECEIVERS}\' '${currentBuild.fullDisplayName} Deploy Failed!' '${env.BUILD_URL}'"
}
}
aborted{
script{
sh "python /xxx/weixin.py \'${env.WEICHAT_RECEIVERS}\' '${currentBuild.fullDisplayName} Deploy aborted!' '${env.BUILD_URL}'"
}
}
}
}