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

如何在Jenkins中实现管理员邮件确认触发的部署启动流程?

实现Jenkins部署前的管理员邮件确认流程

当然可以!这种需要人工邮件确认的部署审批流程,在Jenkins里完全能通过内置功能+插件组合实现,我之前帮团队搭建过类似的流程,给你梳理下具体实现方案:

核心思路

用户提交部署请求(比如触发参数化构建/流水线)→ Jenkins暂停部署流程,自动向管理员发送带确认链接的邮件→ 管理员点击链接完成审批,触发后续部署步骤→ 若超时未确认,自动终止部署。

具体实现步骤

1. 安装必备插件

首先确保你的Jenkins安装了以下插件:

  • Email Extension Plugin:用来定制邮件模板,插入动态的审批链接
  • Build Timeout Plugin(可选):设置审批超时时间,避免构建一直挂起

2. 配置Jenkins邮件服务

在Jenkins全局配置(Manage Jenkins → Configure System)里,找到Extended E-mail Notification,配置好SMTP服务器信息(比如企业邮箱的SMTP地址、端口、账号密码),确保Jenkins能正常发送邮件。

3. 用Pipeline实现审批流程(推荐)

如果你的部署流程是用Jenkins Pipeline编写的,这是最灵活的方式。以下是简化版的示例代码:

pipeline {
    agent any
    stages {
        stage('用户提交部署请求') {
            steps {
                // 这里可以添加部署前的准备步骤,比如拉取代码、参数校验等
                echo "用户提交了部署请求,等待管理员确认..."
            }
        }
        stage('管理员邮件确认') {
            steps {
                script {
                    // 生成input审批步骤,获取审批页面的URL
                    def inputProps = input(
                        id: 'adminApproval',
                        message: '请管理员确认是否启动部署?',
                        submitter: 'admin', // 指定可审批的用户/组
                        parameters: [
                            string(name: 'APPROVAL_REASON', defaultValue: '', description: '审批备注(可选)')
                        ]
                    )
                    // 发送审批通过后的通知邮件
                    emailext(
                        subject: '部署已确认启动',
                        body: "管理员已确认部署,备注:${inputProps.APPROVAL_REASON}",
                        to: 'deploy-team@example.com'
                    )
                }
            }
            post {
                // 进入该阶段后立即发送待审批邮件
                entered {
                    emailext(
                        subject: '【待审批】请确认是否启动部署',
                        body: """
                        您好,有一个部署请求需要您确认:
                        部署项目:${env.JOB_NAME}
                        构建编号:${env.BUILD_NUMBER}
                        点击下方链接完成审批:
                        ${env.BUILD_URL}input?id=adminApproval
                        
                        若超时未处理,部署将自动终止。
                        """,
                        to: 'admin@example.com' // 管理员邮箱
                    )
                }
                // 超时终止后发送通知
                aborted {
                    emailext(
                        subject: '【部署终止】审批超时未处理',
                        body: "部署请求因超时未确认已终止,项目:${env.JOB_NAME},构建编号:${env.BUILD_NUMBER}",
                        to: 'deploy-team@example.com'
                    )
                }
            }
        }
        stage('执行部署') {
            steps {
                echo "开始执行部署步骤..."
                // 这里添加实际的部署命令,比如ssh到服务器执行脚本、调用kubectl等
                // sh 'deploy-script.sh'
            }
        }
    }
    options {
        // 设置审批超时时间,比如24小时
        timeout(time: 24, unit: 'HOURS')
    }
}

4. 关键细节说明

  • 审批链接:${env.BUILD_URL}input?id=adminApproval 这个链接会直接跳转到Jenkins的审批页面,管理员登录后就能点击确认/拒绝
  • 权限控制:submitter参数可以指定只有特定用户或用户组能审批,避免无关人员操作
  • 超时处理:通过timeout选项设置超时时间,超时后构建会自动终止,同时发送通知邮件
  • 邮件模板:你可以根据需求定制HTML格式的邮件模板,添加项目信息、部署环境、代码版本等内容,让通知更清晰

5. 非流水线项目的实现方式

如果你的项目是传统的自由风格项目,可以这样做:

  • 在构建步骤中添加Conditional BuildStep,设置为等待人工确认
  • 用Email Extension Plugin在构建暂停时发送带Jenkins控制台链接的邮件,管理员登录后手动点击继续构建
  • 配合Build Timeout Plugin设置超时时间,超时自动终止

注意事项

  • 确保管理员能正常访问Jenkins的URL(如果是内网Jenkins,需要管理员在同一网络环境下)
  • Jenkins默认基于登录权限控制审批操作,只要管理员登录就能操作,安全性足够;如果需要更严格的验证,可以结合插件实现一次性令牌机制
  • 如果需要多级审批流程,可以结合Build Approval Plugin或者Pipeline Approval Plugin扩展功能

内容的提问来源于stack exchange,提问作者N'bia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:19:13