134 lines
5.0 KiB
Plaintext
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 '执行完毕 !'
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|