如何发送包含Azure DevOps CD管道部署资源详情的邮件
筛选Azure DevOps CD管道部署并发送邮件的实现方案
我来帮你梳理下实现这个需求的具体思路和代码方案,核心是先识别Azure DevOps CD部署的特征,再筛选目标部署、整理信息后发送邮件:
1. 先定位Azure DevOps CD部署的识别特征
Azure DevOps在部署ARM模板时,通常会留下可识别的标记,你可以根据自己的管道配置选下面两种筛选方式:
方式一:按部署名称规则筛选
如果你的CD管道给部署设置了固定命名规则(比如你提到的AppService-Deployment、SQL-Deployment这类和Release绑定的名称),直接通过名称匹配筛选最直接:
# 替换成你的目标资源组名称 $resourceGroupName = "Your-Resource-Group-Name" # 获取资源组内所有部署并按时间倒序排列 $allDeployments = Get-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName | Sort-Object Timestamp -Descending # 定义CD管道部署的名称列表,把你需要的部署名称都加进来 $cdDeploymentTargets = @("AppService-Deployment", "Storage-Deployment", "Service Bus-Deployment", "SQL-Deployment", "Cosmos-Deployment") # 筛选出名称在目标列表里的部署 $cdDeployments = $allDeployments | Where-Object { $cdDeploymentTargets -contains $_.DeploymentName }
方式二:按Azure DevOps专属标签筛选
如果你的CD部署带有统一标签(Azure DevOps默认会添加CreatedBy、ReleaseId这类标签,或者你在管道里自定义了标签),这种方式更灵活:
$resourceGroupName = "Your-Resource-Group-Name" $allDeployments = Get-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName | Sort-Object Timestamp -Descending # 筛选出由Azure DevOps创建的部署,或包含Release相关标签的部署 $cdDeployments = $allDeployments | Where-Object { # 检查CreatedBy标签是否为Azure DevOps,或者存在自定义的ReleaseName标签 ($_.Tags.ContainsKey("CreatedBy") -and $_.Tags["CreatedBy"] -eq "Azure DevOps") -or $_.Tags.ContainsKey("ReleaseName") }
2. 整理部署详情为邮件内容
把筛选后的部署信息整理成美观的HTML格式(邮件里用HTML排版可读性更强):
# 初始化邮件HTML内容 $mailBody = @" <h2>Azure DevOps CD管道部署详情报告</h2> <table border='1' cellpadding='6' style='border-collapse: collapse;'> <tr style='background-color: #f0f0f0;'> <th>部署名称</th> <th>部署时间</th> <th>部署状态</th> <th>关联Release</th> </tr> "@ # 遍历筛选后的部署,逐行添加到表格 foreach ($deploy in $cdDeployments) { # 如果没有Release标签,显示"未标记" $releaseTag = $deploy.Tags["ReleaseName"] ?? "未标记" $mailBody += @" <tr> <td>$($deploy.DeploymentName)</td> <td>$($deploy.Timestamp.ToString("yyyy-MM-dd HH:mm:ss"))</td> <td>$($deploy.ProvisioningState)</td> <td>$releaseTag</td> </tr> "@ } $mailBody += "</table>"
3. 发送邮件
用PowerShell自带的Send-MailMessage命令发送邮件(如果是在Azure自动化账户运行,也可以用SendGrid模块,这里提供通用方案):
# 邮件配置信息,替换成你的实际参数 $smtpServer = "smtp.office365.com" # 比如用Office 365的SMTP服务器 $smtpPort = 587 $fromEmail = "your-alert-email@domain.com" $toEmails = @("team-member1@domain.com", "team-member2@domain.com") $mailSubject = "Azure CD部署详情 $(Get-Date -Format 'yyyy-MM-dd')" # 发送邮件(如果需要认证,这里可以用预先存储的凭据,避免手动输入) Send-MailMessage -SmtpServer $smtpServer -Port $smtpPort ` -From $fromEmail -To $toEmails ` -Subject $mailSubject -Body $mailBody -BodyAsHtml ` -UseSsl -Credential (Get-Credential)
额外小提示:
- 你可以把这个脚本集成到Azure DevOps CD管道的后续任务中,实现部署完成后自动发送报告。
- 如果需要扩展邮件内容,比如添加部署的资源列表、失败原因(如果部署出错),直接从
$deploy对象里提取对应属性即可(比如$deploy.Outputs、$deploy.Error)。
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

