如何在Azure DevOps流水线部署完成后发送包含已完成任务的邮件?
Azure DevOps Staging 环境部署通知邮件实现方案
你提到的对比PR创建时间与最近一次部署时间的思路是完全可行的,同时也可以借助Azure DevOps(以下简称ADO)原生的关联能力实现,无需自行处理时间比对逻辑,两种方案的实现方法如下:
方案一:使用ADO原生关联能力(推荐,无需自定义时间逻辑)
ADO默认会自动关联每次构建、部署对应的PR和工作项,直接使用内置能力即可快速实现需求:
- 首先确保你的代码提交、PR都按照规则关联了对应工作项,ADO会自动把本次部署范围内的所有PR、关联工作项绑定到部署记录中。
- 部署到Staging环境的阶段末尾,新增邮件发送任务:
- 如果是经典图形界面流水线,直接添加内置的
Send Email任务,内置模板已支持直接插入预定义变量获取PR、工作项信息。 - 如果是YAML流水线,可使用内置的
SendEmail@1任务,或者自行调用SMTP服务发送邮件。
- 如果是经典图形界面流水线,直接添加内置的
- 可直接使用的预定义变量包括:
$(Build.SourceVersionMessage):本次触发部署的PR合并说明/提交说明$(Release.ReleaseDescription):发布记录描述,PR触发的发布默认会携带PR标题内容- 如果需要完整的本次部署关联PR列表、任务列表,可在脚本中调用ADO接口拉取:
$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/workitems?api-version=7.1-preview.3
- 拼接好PR标题、新增任务内容后,配置好收件人即可完成发送。
方案二:自行比对时间实现(适合需要高度自定义的场景)
你最初的思路可按以下步骤落地:
- 部署阶段开始时,先调用ADO发布接口拉取Staging环境最近一次成功部署的时间,接口格式:
$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/release/deployments?definitionId=$(Release.DefinitionId)&definitionEnvironmentId=$(Release.DefinitionEnvironmentId)&deploymentStatus=succeeded&$top=1&api-version=7.1-preview.2 - 调用PR列表接口,筛选出创建时间大于上一次部署时间、状态为已完成的PR,同时拉取这些PR关联的工作项信息。
- 将筛选出的PR标题、关联任务内容拼接为邮件正文,发送即可。
注意事项
- 需要给流水线的服务账号开通发布读取、工作项读取权限,否则调用API时会出现权限不足错误。
- 若不需要自定义邮件格式,也可以直接在项目设置的
通知页面,新增「部署到Staging环境成功」的通知规则,默认通知模板已经包含关联PR、工作项内容,调整模板格式后即可直接使用,无需编写代码。
内容的提问来源于stack exchange,提问作者samivagyok
相关产品推荐
相关产品推荐

