写点什么

基于 Pipeline 实现完整的代码部署流水线

作者:忙着长大#
  • 2022-11-27
    北京
  • 本文字数:2314 字

    阅读完需:约 8 分钟

一个很简单的 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)。

用户头像

忙着长大#

关注

还未添加个人签名 2022-02-09 加入

还未添加个人简介

评论

发布
暂无评论
基于 Pipeline 实现完整的代码部署流水线_忙着长大#_InfoQ写作社区