如何在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
相关产品推荐
相关产品推荐

