1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
| def project_name="${JOB_NAME}".split("/")[1] // 多分支的项目名称 def branch_name="${JOB_NAME}".split("/")[2] // 多分支的分支名称 def scmUrl = scm.getUserRemoteConfigs()[0].getUrl() // 获取项目 git地址
pipeline { // 任意主机运行pipeline agent any
// 编译的工具 tools { maven 'mvn-3.3.9' }
// 定义全局变量 environment { // PIPELINE_CONFIG // BRANCH_NAME 分支名称 // JOB_BASE_NAME job名称 // JOB_NAME job 全称 // WORKSPACE 构建目录 // BUILD_NUMBER 构建次数 // BUILD_URL 构建的url 加上 consoleText 直达文本页面 BUILD_DATE = sh (script: 'date "+%m%d"', returnStdout: true).trim() // 获取今天的时间 月日 IMAGE_TAG = "${env.BRANCH_NAME}.${BUILD_DATE}.${env.BUILD_NUMBER}" // 镜像tag OUTPUT_URL_TEXT="${env.BUILD_URL}consoleText" // 文本url }
triggers { GenericTrigger ( // 构建时的标题 causeString: 'Triggered by $ref', // 获取POST参数中的变量,key指的是变量名,通过$ref来访问对应的值,value指的是JSON匹配值(参考Jmeter的JSON提取器) // ref指的是推送的分支,格式如:refs/heads/master genericVariables: [[key: 'ref', value: '$.ref'],[key: 'repositoryURL', value: '$.repositoryURL'], [key: 'branch', value: '$.branch']], // 打印获取的变量的key-value,此处会打印如:ref=refs/heads/master printContributedVariables: true, // 打印POST传递的参数 printPostContent: true, // regexpFilterExpression与regexpFilterExpression成对使用 // 当两者相等时,会触发对应分支的构建 regexpFilterExpression: '^refs/heads/(master|production)$', regexpFilterText: '$ref', // 与webhook中配置的token参数值一致 token: "${project_name}" ) }
// 流水线阶段 stages { stage("下载代码"){ steps{ git credentialsId: 'gitee_admin', url: "${scmUrl}" script { config = readYaml file: 'config.yml' // 读取config.yml IMAGE_WHOLE_NAME = "${config.IMAGE_NAME}:${IMAGE_TAG}" // 定义完整的镜像名称 } } }
stage("编译"){ steps{ sh "/usr/local/maven/bin/mvn clean package -Dfile.encoding=UTF-8 -DskipTests=true;" } }
stage("构建镜像"){ steps { sh """ cd ${WORKSPACE} docker build -t ${IMAGE_WHOLE_NAME} . """ } }
stage("部署镜像"){ steps { sh """ kubectl set image deployment/${config.DEPLOY_NAME} ${config.CONTAINER_NAME}=${IMAGE_WHOLE_NAME} sleep 5; """ } }
stage('判断镜像触发') { steps { script { _image = sh(script: "kubectl get deploy ${config.DEPLOY_NAME} -o jsonpath='{..image}'", returnStdout: true).trim() if ( _image == "${IMAGE_WHOLE_NAME}" ) { echo "${_image} Trigger successfully." // mail bcc: '', body: "${IMAGE_WHOLE_NAME} image触发成功!", cc: '', from: 'guopeihua@ele-cloud.com', replyTo: '', subject: '镜像触发成功', to: '17611443879@163.com' }else{ echo "${_image} Triggered failed." mail bcc: '', body: "${IMAGE_WHOLE_NAME} image触发失败 退出构建!", cc: '', from: 'guopeihua@ele-cloud.com', replyTo: '', subject: '镜像触发失败', to: '17611443879@163.com' sh 'exit 1' } } } }
}
post{ always{ // 始终都会执行 script{ println('构建结果') } } success{ mail bcc: '', body: "job ${env.JOB_NAME}第${env.BUILD_NUMBER}次构建成功! \n deploy_name: ${config.DEPLOY_NAME} \n URL: ${OUTPUT_URL_TEXT} ", cc: '', from: 'guopeihua@ele-cloud.com', replyTo: '', subject: '[构建成功]', to: '17611443879@163.com' script{ println('success--构建成功!') echo "项目构建地址为: ${OUTPUT_URL_TEXT}" } } failure{ mail bcc: '', body: "job ${env.JOB_NAME}第${env.BUILD_NUMBER}次构建失败! \n deploy_name: ${config.DEPLOY_NAME} \n URL: ${OUTPUT_URL_TEXT} ", cc: '', from: 'guopeihua@ele-cloud.com', replyTo: '', subject: '[构建失败]', to: '17611443879@163.com' script{ println('failure--构建失败!') } } aborted{ mail bcc: '', body: "job ${env.JOB_NAME}第${env.BUILD_NUMBER}次构建终止! \n deploy_name: ${config.DEPLOY_NAME} \n URL: ${OUTPUT_URL_TEXT}", cc: '', from: 'guopeihua@ele-cloud.com', replyTo: '', subject: '[构建终止]', to: '17611443879@163.com' script{ println('aborted--构建终止!') } } } }
|