You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline:选择指定构建版本部署至生产环境的方法

我太懂这种感觉了!Freestyle里的Promote Plugin用起来简直顺手,但转到Pipeline之后确实得换个思路——不过别担心,咱们有几个靠谱的方案,既能实现选择指定构建编号+对应制品部署到生产环境的需求,灵活性还比Freestyle更强。

方案1:用Pipeline原生input步骤+制品检索(轻量灵活,无需额外插件)

这个方案适合不想堆砌插件的场景,核心是通过交互式输入让用户选择目标构建编号,再从制品存储(Jenkins构建 artifacts、Nexus、Harbor等)拉取对应版本部署。

具体实现步骤:

  1. 提前关联构建与制品:在Staging构建Pipeline中,确保构建编号和制品强绑定——比如上传制品时用构建编号作为版本标识,或者在构建描述里记录制品存储路径。
  2. 编写晋升Pipeline(或在原Pipeline中加晋升阶段):
pipeline {
    agent any
    stages {
        stage('选择要晋升的构建') {
            steps {
                script {
                    // 弹出交互式输入框,让用户输入目标构建编号
                    def targetBuildNumber = input(
                        message: '请输入要晋升到生产环境的Staging构建编号:',
                        parameters: [string(defaultValue: '', description: 'Staging构建编号', name: 'BUILD_NUMBER')]
                    )
                    
                    // 可选:验证构建是否存在(避免无效输入)
                    def targetJob = jenkins.model.Jenkins.instance.getItemByFullName('你的Staging流水线名称')
                    def targetBuild = targetJob.getBuildByNumber(targetBuildNumber as int)
                    if (!targetBuild || targetBuild.result != hudson.model.Result.SUCCESS) {
                        error "构建${targetBuildNumber}不存在或未通过Staging验证,请重新输入!"
                    }
                    
                    // 从目标构建拉取制品(这里以Jenkins artifacts为例)
                    copyArtifacts(
                        projectName: '你的Staging流水线名称',
                        selector: specific(targetBuildNumber),
                        target: 'prod-artifacts/',
                        flatten: true
                    )
                }
            }
        }
        stage('部署到生产环境') {
            steps {
                script {
                    // 替换成你的生产部署脚本(kubectl/ansible/Shell脚本等)
                    sh './deploy-prod.sh --artifact-path prod-artifacts/your-app-package.tar.gz'
                }
            }
        }
    }
}
  1. 优化体验:让用户选择而非手动输入:如果想避免输入错误,可以通过Jenkins API拉取最近的合格构建,做成下拉选择:
// 封装函数:获取Staging流水线最近10个成功构建的编号
def getValidStagingBuilds() {
    def stagingJob = jenkins.model.Jenkins.instance.getItemByFullName('你的Staging流水线名称')
    return stagingJob.getBuilds()
        .findAll { it.result == hudson.model.Result.SUCCESS }
        .take(10)
        .collect { it.number.toString() }
        .reverse() // 让最新的构建排在前面
}

// 在input步骤中使用下拉选择
def targetBuildNumber = input(
    message: '选择要晋升的Staging构建:',
    parameters: [choice(choices: getValidStagingBuilds().join('\n'), description: '已通过验证的Staging构建', name: 'BUILD_NUMBER')]
)

方案2:使用Promoted Builds for Pipeline插件(贴近Freestyle体验)

如果你怀念Freestyle里Promote Plugin的直观感,Jenkins官方有个Promoted Builds for Pipeline插件,专门给Pipeline做构建晋升,能实现类似"标记可晋升构建"、"一键触发晋升"的功能。

具体用法:

  1. 安装插件后,在Staging Pipeline中标记合格构建:
stage('Staging验证') {
    steps {
        sh './run-staging-validation.sh'
    }
    post {
        success {
            // 标记当前构建为「可晋升到生产」,并关联生产部署流水线
            promote(
                name: '晋升到生产环境',
                icon: 'star-gold', // 自定义图标,和Freestyle保持视觉一致
                conditions: [], // 这里可以加自动触发条件,默认手动触发
                targets: [
                    pipelineTarget(
                        pipeline: '你的生产部署流水线名称',
                        parameters: [string(name: 'TARGET_BUILD_NUMBER', value: env.BUILD_NUMBER)]
                    )
                ]
            )
        }
    }
}
  1. 生产部署流水线接收参数并部署:和方案1的部署阶段逻辑一致,只需通过params.TARGET_BUILD_NUMBER获取目标构建编号,拉取对应制品即可。
  2. 效果:在Staging构建的详情页会出现一个「晋升到生产环境」的按钮,点击后直接触发生产部署流程,自动传入当前构建编号,完全复刻Freestyle的操作体验。

关键注意事项

  • 制品一致性:务必保证构建编号和制品一一对应,建议用构建编号作为制品的版本号或存储目录名,避免拉错资源。
  • 权限控制:给晋升流程加权限限制,比如只有运维或核心开发能触发,避免误操作:
input(
    message: '请确认晋升到生产环境',
    submitter: 'ops-team,dev-lead', // 指定可提交的用户/组
    parameters: [string(name: 'BUILD_NUMBER', description: '构建编号')]
)
  • 回滚机制:别忘了在生产部署流水线中加入回滚步骤,比如部署失败时自动回滚到上一个稳定版本。

内容的提问来源于stack exchange,提问作者Dima Kreisserman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:47:59