full_container_scheme/3.kubernetes/jenkins/pipline/pipline-deploy.Jenkinsfile

134 lines
5.0 KiB
Plaintext

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 '执行完毕 !'
}
}
}