You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何一键自动化审批并部署50+条生产环境Release Pipeline?

一键自动化审批并批量部署生产Release Pipeline的方案

绝对有办法解决这个重复繁琐的手动审批问题!作为常年和CI/CD流水线打交道的开发者,我来给你分享几个主流平台下的实操方案,都是经过生产环境验证的:

一、Azure DevOps环境下的实现

如果你的流水线基于Azure DevOps,最直接的方式是用REST API + 脚本批量处理审批和部署:

步骤1:准备权限

生成一个拥有「Release读取、审批、执行」权限的个人访问令牌(PAT),确保它能访问所有目标生产流水线。

步骤2:编写批量处理脚本

用PowerShell或Python写一个脚本,核心逻辑是拉取待审批的生产发布、自动完成审批、触发部署流程。这里给你一个PowerShell示例片段:

$orgName = "你的组织名"
$projName = "你的项目名"
$pat = "你的PAT令牌"
$headers = @{Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))}

# 获取所有待审批的生产发布
$releasesUrl = "https://dev.azure.com/$orgName/$projName/_apis/release/releases?status=active&`$expand=approvals&api-version=7.1-preview.8"
$releases = Invoke-RestMethod -Uri $releasesUrl -Headers $headers -Method Get

foreach ($release in $releases.value) {
    # 只处理生产环境的发布(根据你的环境名称过滤)
    if ($release.environments.name -eq "Production") {
        foreach ($approval in $release.approvals) {
            if ($approval.status -eq "pending") {
                # 发送审批请求
                $approveUrl = "https://dev.azure.com/$orgName/$projName/_apis/release/approvals/$($approval.id)?api-version=7.1-preview.3"
                $approveBody = @{
                    status = "approved"
                    comments = "Automated production approval via script"
                } | ConvertTo-Json
                Invoke-RestMethod -Uri $approveUrl -Headers $headers -Method Patch -Body $approveBody -ContentType "application/json"
                
                # 触发部署(如果审批后需要手动触发)
                $deployUrl = "https://dev.azure.com/$orgName/$projName/_apis/release/releases/$($release.id)/environments/$($release.environments.id)?api-version=7.1-preview.7"
                $deployBody = @{status = "inProgress"} | ConvertTo-Json
                Invoke-RestMethod -Uri $deployUrl -Headers $headers -Method Patch -Body $deployBody -ContentType "application/json"
            }
        }
    }
}

二、Jenkins环境下的实现

如果用的是Jenkins,可以通过Groovy脚本+Jenkins API或者自定义主流水线实现批量操作:

方案1:自定义主流水线

创建一个专门的「生产批量部署」流水线,遍历所有目标生产流水线,自动完成审批和触发:

// 替换成你的生产流水线名称列表
def productionPipelines = ["OrderService-Prod", "UserService-Prod", "..."]

pipeline {
    agent any
    stages {
        stage("批量审批并部署") {
            steps {
                script {
                    productionPipelines.each { pipelineName ->
                        def job = Jenkins.instance.getItemByFullName(pipelineName)
                        // 获取最新的待审批构建
                        def pendingBuild = job.getBuilds().find { build ->
                            def inputAction = build.getAction(org.jenkinsci.plugins.workflow.support.steps.input.InputAction)
                            inputAction != null && inputAction.getInputs().any { it.isPending() }
                        }
                        
                        if (pendingBuild) {
                            // 自动审批输入步骤
                            def inputAction = pendingBuild.getAction(org.jenkinsci.plugins.workflow.support.steps.input.InputAction)
                            inputAction.getInputs().each { input ->
                                input.proceed("Automated production approval", null)
                            }
                            // 恢复构建流程(触发部署)
                            pendingBuild.doResume()
                            echo "已完成${pipelineName}的审批和部署触发"
                        }
                    }
                }
            }
        }
    }
}

方案2:使用插件辅助

可以借助Pipeline AggregatorMultiJob Plugin管理多个流水线,设置统一的触发和审批规则,一键触发所有关联的生产部署。

三、通用跨平台方案:统一编排层

如果你的流水线分散在不同平台,或者想要更灵活的控制,可以引入统一编排工具(比如Argo CD、Spinnaker):

  • 将所有生产Release Pipeline纳入编排工具管理
  • 配置自动化审批规则:比如必须通过所有测试、合规检查、代码扫描
  • 提供一键触发入口,满足条件后自动完成所有流水线的审批和部署

四、关键安全注意事项

生产环境的自动化审批必须谨慎,一定要做好这些防护:

  • 权限管控:只有指定的运维/发布角色才能执行一键操作,操作需要二次验证(比如MFA)
  • 前置校验:脚本/工具必须先检查所有流水线是否通过预发布的所有校验(测试、扫描等),不满足条件则终止操作
  • 审计日志:记录每一次自动化操作的执行人、时间、涉及的流水线列表,方便追溯
  • 灰度验证:先在测试环境用少量流水线验证脚本,确认无误后再推广到所有生产流水线

内容的提问来源于stack exchange,提问作者Kamlesh Joshi

火山引擎 最新活动