我正在使用以前称为 Visual Studio Online (VSO) 的 Visual Studio Team Services (VSTS) 来构建持续交付管道。我的目标是尽可能接近 Jez Humble 和 David Farley 的《持续交付》一书。
我希望当一个阶段(在 VSTS 中名为 Environment)失败时,会向参与此版本的每个开发人员发送通知(一封电子邮件) 。该通知会说:
- 你打破了舞台(回归)
- 舞台已经被打破(失败)
- 你修好了舞台。(固定的)
目前,只有手动创建发布的人(或通过推送触发构建的提交然后发布)才会收到这封电子邮件,而没有我想要的信息。
我已经玩了一点 VSTS API,并且可以获得给定构建(但不是给定版本)的相关提交(和开发人员电子邮件):
$token = "vsts token"
$endpoint = "https://acme.visualstudio.com/DefaultCollection/MyProject/_apis/build/builds/42/changes?api-version=2.0"
$b64creds = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($token):a"))
$changes = Invoke-RestMethod -Headers @{Authorization="Basic $b64creds"} $endpoint
$changes.value | ForEach-Object { $_.author.uniqueName }
我已经看到在 VSTS 界面中,您可以看到在 2 个版本之间添加了哪些提交。即使我没有在 API 中找到这些信息,它也非常接近我想要的。但是即使有了这些信息,我的项目的所有分支都使用相同的发布定义,例如,Release-26 将是一个功能分支,而 Release-27 将是开发的。比较这两个版本没有意义。
我知道我可以在发布阶段从环境变量中获取构建 ID,然后使用上面的脚本创建一个 PowerShell 任务或插入 VSTS 的 Web 服务。但它只有在每次构建都触发发布时才有效,但情况并非总是如此。
您知道使用 VSTS 发送此通知的(更好的)方法吗?
我是否为这类事情使用了正确的工具?