pipeline { // 指定由Master还是node节点执行任务 agent {label 'master'} // agent {label 'jnlp-slave'} parameters { branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'GIT_BRANCH', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH_TAG' } options { buildDiscarder(logRotator(numToKeepStr: '10')) timeout(time: 10, unit: 'MINUTES') // 默认10秒超时 } environment { // PROJECT = "${JOB_BASE_NAME##*.}" PROJECT = "${JOB_BASE_NAME}" HARBOR_URL="harbor.opsbase.cn/public" // 使用凭证保存钉钉接口token信息 DINGTALK_CREDS = credentials('dingtalk') } stages { stage('printenv') { steps { echo '打印环境变量' sh 'printenv' script{ env.GIT_LOG = "" env.BUILD_TASKS = "" env.imageTag = "None" } } } stage('checkout') { steps { // 通过流水线语法自定义生成检出语句 checkout( [ $class: 'GitSCM', branches: [[name: '*/${GIT_BRANCH}']], //branches: [[name: '*/develop']], extensions: [ [$class: 'CheckoutOption', timeout: 120], [$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true ,timeout: 60]], userRemoteConfigs: [[credentialsId: 'gitee', url: '${GIT_URL}']] ] ) // checkout([$class: 'GitSCM', branches: [[name: '*/${GIT_BRANCH}']], extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]], userRemoteConfigs: [[url: '${GIT_URL}']]]) // updateGitlabCommitStatus(name: env.STAGE_NAME, state: 'success') script{ sh "git log --oneline -n 1 > gitlog.file" env.GIT_LOG = readFile("gitlog.file").trim() env.imageTag = sh (script: 'git rev-parse --short HEAD ${GIT_COMMIT}', returnStdout: true).trim() env.BUILD_TASKS = "\n" + env.STAGE_NAME } // updateGitlabCommitStatus(name: env.STAGE_NAME, state: 'success') } } stage('build-image') { steps { retry(2) { sh 'docker build . -t ${HARBOR_URL}/${PROJECT}:${imageTag}' } } } stage('push-image') { steps { retry(2) { sh 'docker push ${HARBOR_URL}/${PROJECT}:${imageTag}'} // updateGitlabCommitStatus(name: env.STAGE_NAME, state: 'success') script{ env.BUILD_TASKS += "\t=>\t" + env.STAGE_NAME } } } stage('deploy') { steps { sh "sed -i 's#{{IMAGE_URL}}#${HARBOR_URL}/${PROJECT}:${imageTag}#g' manifests/*" timeout(time: 1, unit: 'MINUTES') { sh "kubectl apply -f manifests/" } // updateGitlabCommitStatus(name: env.STAGE_NAME, state: 'success') script{ env.BUILD_TASKS += "\t=>\t" + env.STAGE_NAME } } } } post { success { sh """ curl -s 'https://oapi.dingtalk.com/robot/send?access_token=${DINGTALK_CREDS_PSW}' \ -H 'Content-Type: application/json' \ -d '{ "msgtype": "markdown", "markdown": { "title":"${JOB_BASE_NAME}", "text": "任务构建成功 😄 \n**项目名称**: ${JOB_BASE_NAME}\n \n**构建分支**: ${GIT_BRANCH}\n \n**Git log**: ${GIT_LOG}\n \n**构建任务**:\n ${BUILD_TASKS}\n \n**构建地址**: ${RUN_DISPLAY_URL}" } }' """ } failure { sh """ curl -s 'https://oapi.dingtalk.com/robot/send?access_token=${DINGTALK_CREDS_PSW}' \ -H 'Content-Type: application/json' \ -d '{ "msgtype": "markdown", "markdown": { "title":"${JOB_BASE_NAME}", "text": "任务构建失败 ❌ \n**项目名称**: ${JOB_BASE_NAME}\n \n**构建分支**: ${GIT_BRANCH}\n \n**Git log**: ${GIT_LOG}\n \n**构建任务**:\n ${BUILD_TASKS}\n \n**构建地址**: ${RUN_DISPLAY_URL}" } }' """ } always { echo '执行完毕 !' } } }