一个很简单的 pipline 实现,克隆代码--代码质量检测--构建镜像--镜像部署--任务通知
pipeline {
agent any
parameters {
string(name: 'BRANCH', defaultValue: 'main', description: '分支选择') //字符串参数,会配置在jenkins的参数化构建过程中
string(name: 'VERSION', defaultValue: '1.22.0-alpine-v1', description: '镜像版本') //字符串参数,会配置在jenkins的参数化构建过程中
choice(name: 'DEPLOY_ENV', choices: ['develop', 'production'], description: '部署环境选择') //选项参数,会配置在jenkins的参数化构建过程中
}
environment { //全局的变量,在当前 pipline 所有的 stage 中都会生效
IMAGE_REPOSTITORY_ADDR='192.168.131.129'
}
stages {
stage('Hello') {
steps {
echo 'Hello !!!'
}
}
stage('git clone') {
steps {
echo 'start clone code from gitlab'
git branch: '${BRANCH}', credentialsId: '3f0d5a7b-a375-4693-ab9d-319a0e41cf4c', url: 'git@192.168.131.130:my-app1/app1-1.git'
}
}
stage('python源代码质量扫描') {
steps {
sh "cd $env.WORKSPACE && /apps/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=test -Dsonar.projectName=test-python-app1 -Dsonar.projectVersion=1.1 -Dsonar.sources=./src -Dsonar.language=py -Dsonar.sourceEncoding=UTF-8"
}
}
stage('buid image') {
steps {
echo 'start build image use docker'
sh 'cd ${WORKSPACE} && pwd && docker build -f dockerfile -t ${IMAGE_REPOSTITORY_ADDR}/local/nginx:${VERSION} . && docker push ${IMAGE_REPOSTITORY_ADDR}/local/nginx:${VERSION}'
}
}
stage('deploy image') {
steps {
echo 'start build image use docker'
sh '/root/nginx-app/deploy-nginx-app.sh ${IMAGE_REPOSTITORY_ADDR}/local/nginx:${VERSION}'
}
post {
cleanup {
script {
mail to: '1395001789@qq.com',
subject: "Pipeline Name: ${currentBuild.fullDisplayName}",
body: " ${env.JOB_NAME} -Build Number-${env.BUILD_NUMBER} -cleanup 构建任务完成!\n 点击链接 ${env.BUILD_URL} 查看详情"
}
}
always {
script {
mail to: '1395001789@qq.com',
subject: "Pipeline Name: ${currentBuild.fullDisplayName}",
body: " ${env.JOB_NAME} -Build Number-${env.BUILD_NUMBER} -always 构建任务!!\n 点击链接 ${env.BUILD_URL} 查看详情"
}
}
aborted {
echo "post aborted"
}
success {
script {
mail to: '1395001789@qq.com',
subject: "Pipeline Name: ${currentBuild.fullDisplayName}",
body: " ${env.JOB_NAME} -Build Number-${env.BUILD_NUMBER} - 构建成功!\n 点击链接 ${env.BUILD_URL} 查看详情"
}
}
failure {
script {
mail to: '1395001789@qq.com',
subject: "Pipeline Name: ${currentBuild.fullDisplayName}",
body: " ${env.JOB_NAME} -Build Number-${env.BUILD_NUMBER} -failure 构建失败!\n 点击链接 ${env.BUILD_URL} 查看详情"
}
}
}
}
}
}
复制代码
构建步骤执行结果通知:
always:无论 Pipeline 或 stage 的最后是执行成功还是失败,都执行 post 中定义的指令。
changed:只有当前 Pipeline 或 stage 的完成状态与它之前的运行不同时,比如从成功转换为失败、或从失败转换为成功,才执行 post 中定义的指令。
fixed:当本次 Pipeline 或 stage 成功,且上一次构建是失败或不稳定时,就执行 post 中定义的指令,从失败转换为成功。
regression:当本次 Pipeline 或 stage 的状态为失败、不稳定或终止,且上一次构建的状态为成功时,就执行 post 中定义的指令,从成功转换为失败。
failure:只有当前 Pipeline 或 stage 的完成状态为失败(failure),才允许在 post 部分运行该步骤,而且通常这时在 Web 界面中显示为红色。
success:当前执行状态为成功(success),执行 post 步骤,通常在 Web 界面中显示为蓝色或绿色。
unstable:当前状态为不稳定(unstable),执行 post 步骤,通常原因是由于测试失败或代码违规等造成,而且会在 Web 界面中显示为黄色。
aborted:当前状态为终止(aborted),执行该 post 步骤,通常由于流水线被手动终止触发,这时在在 Web 界面中显示为灰色。
unsuccessful:当前状态只要不是 success 时,执行该 post 步骤;
cleanup:无论 pipeline 或 stage 的完成状态如何,都允许运行该 post 中定义的指令,和 always 的区别在 cleanup 会在 post 其它条件执行之后执行(最后执行 cleanup)。
评论