一、系统环境:

操作系统:centos7.8

jenkins版本:2.289.3

二、需求背景

由于在实际的生产环境中,有的项目发布后由于各种原因需要回退到之前的版本,所以我们需要在jenkins上配置版本回滚,方便出现问题后及时回滚到之前版本。

三、具体操作

1、增加参数化构建

        首先需要增加一个参数化构建过程,在每次构建前,会提示我们是否需要发布还是回滚,默认是直接发布的状态。下面也会细讲。

 2、归档成品

        由于回滚的操作,需要把项目的包文件备份到每次构建的任务下,这样在jenkins的每次job下,都会备份一个相对应的包文件,方便版本回滚,我们写入存档的文件,生成对应的脚本文文件。

 3、编辑pipeline脚本

       编辑环境构建语句,如果选择发布就进行构建,如果选择回滚,就将之前归档的包文件,替换到现有路径下。

        将对应的归档脚本增加到pipeline的脚本中,在每次发布完成后,进行包文件归档操作。

stage('环境构建') {
            steps {
                sh '''case $status in
    deploy)
        echo “status: $status”
        mvn clean test package
        ;;
    rollback)
        echo “status: $status”
        echo “version: version”
        rm -rf target
        cp -R ${JENKINS_HOME}/jobs/pipeline-test/builds/${version}/archive/target .
        pwd && ls
        ;;
    *)
    exit
        ;;
esac'''

 4、保存并测试

        构建的时候,要选择进行发布操作还是回滚操作,如果选择回滚操作,需要写入回滚的对应版本。

 5、后期优化

        由于回滚操作会归档每次版本的包文件,长时间运行会导致磁盘增长较快,建议配置成保留的个数或者天数,将之前多余且不用回滚的包文件进行删除。

6、二次判断 

stage('确认确认-2') {
            steps {
                script {
                    def userInput = input(
                        message: '选择继续发布或者回滚操作',
                        parameters: [
                            choice(choices: ['deploy2', 'rollback2'], description: 'deploy2:发布操作;rollback2:回滚操作', name: 'status2'),
                            string(defaultValue: '0', description: '回滚版本号【建议选择前一个可用版本号】,发布操作可忽略', name: 'version2')
                        ]
                    )
                    echo "User selected action: ${userInput.status2}"
                    echo "User provided version: ${userInput.version2}"
                    if (userInput.status2 == 'deploy2') {
                            echo "is deploy2"
                    } else {
                        script{
                            sh "rm -rf target && cp -R ${JENKINS_HOME}/jobs/test-test/builds/${userInput.version2}/archive/target ./"
                            echo "is rollback2"
                        }
                    } 
                }
            }
        }

注: 

以上为本人实际搭建过程中的经验总结,如果有什么问题,可以在评论区留言,大家一起探讨进步!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐