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

如何发送包含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:19:21