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

Jenkins流水线能否通过邮件发送用户输入入口供相关人员操作审批

可落地实现方案

完全可以实现,核心逻辑是利用Jenkins输入节点的原生API+身份令牌+自定义邮件通知,让审批人不用登录Jenkins控制台,点邮件里的按钮就能完成操作,具体实现步骤如下:

前置插件准备

  • 安装Email Extension Plugin:支持发送自定义HTML格式的通知邮件,比Jenkins自带的邮件功能灵活度更高
  • 安装Build Authorization Token Root Plugin:支持通过URL携带令牌完成身份校验,避免点击链接时跳转到Jenkins登录页
  • 提前给审批人账号生成专属API Token:登录审批人对应的Jenkins账号,进入个人配置页,在API Token区块生成新令牌并妥善保存,令牌只会在生成时展示一次。

流水线改造示例

直接在声明式流水线中按如下逻辑编写即可,注意敏感信息不要硬编码,统一存在Jenkins凭据库中调用:

pipeline {
    agent any
    stages {
        stage('人工审批节点') {
            steps {
                script {
                    // 配置接收审批通知的邮箱列表
                    def approverMails = ["tech_leader@company.com", "ops_leader@company.com"]
                    // 从凭据库读取审批人账号、API Token,避免硬编码泄露
                    def approverAccount = credentials('jenkins-approver-account')
                    def approverToken = credentials('jenkins-approver-api-token')
                    // 拼接免登操作链接
                    def baseUrl = env.BUILD_URL
                    def proceedUrl = "${baseUrl}input?proceed=同意执行&token=${approverToken}&userId=${approverAccount}"
                    def abortUrl = "${baseUrl}input?abort=中止执行&token=${approverToken}&userId=${approverAccount}"
                    
                    // 发送带操作按钮的审批邮件
                    emailext (
                        subject: "【待审批】Jenkins流水线 ${env.JOB_NAME} 第${env.BUILD_NUMBER}次构建",
                        body: """
                        <p>流水线当前已运行至人工确认节点,请您选择后续操作:</p>
                        <p style="margin:20px 0;">
                            <a href="${proceedUrl}" style="background:#52c41a;color:#fff;padding:8px 18px;border-radius:4px;text-decoration:none;margin-right:20px;">同意继续执行</a>
                            <a href="${abortUrl}" style="background:#ff4d4f;color:#fff;padding:8px 18px;border-radius:4px;text-decoration:none;">中止流水线</a>
                        </p>
                        <p style="color:#999;font-size:12px;">点击按钮无需登录Jenkins平台,操作后流水线将自动流转</p>
                        """,
                        mimeType: 'text/html',
                        to: approverMails.join(",")
                    )
                    
                    // 启动输入等待,可按需配置超时自动中止逻辑
                    input message: '等待审批人操作',
                          timeout: time: 24, unit: 'HOURS'
                }
            }
        }
        stage('审批后业务流程') {
            steps {
                echo "审批通过,开始执行后续部署/构建逻辑"
            }
        }
    }
}

注意事项

  • 禁止将API Token、账号信息直接硬编码在流水线脚本中,所有敏感凭据统一存放在Jenkins凭据管理模块,通过credentials()方法读取调用
  • 多审批人场景可以给每个审批人生成独立的API Token,分别拼接专属操作链接,后续可通过构建日志审计具体操作人
  • 注意确认邮件中拼接的Jenkins地址是审批人网络环境下可正常访问的地址,内网部署的Jenkins不要配置公网无法访问的本地域名
  • 如果对安全性要求更高,可以在链接中增加一次性校验参数,在流水线中加一层参数校验逻辑,避免链接转发后被无关人员误操作
  • 建议给输入等待节点配置超时规则,避免构建任务长时间挂起占用Jenkins执行资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:09:22