我使用Visual Studio Team Services(VSTS)(以前称为Visual Studio Online(VSO))来构建Continuous Delivery管道。我的目标是尽可能地追随Jez Humble和David Farley的Continuous Delivery书。
我希望当一个阶段(在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界面中,您可以看到在两个版本之间添加了哪些提交。即使我没有在API中找到这些信息,它也非常接近我想要的。但即使有了这些信息,我的项目的所有分支都使用相同的版本定义,因此例如Release-26将是一个功能分支,Release-27将被开发。比较这两个版本是没有意义的。
我知道我可以在环境变量的发布阶段获取构建ID,然后使用上面的脚本创建一个PowerShell任务或插入VSTS的Web服务。但它只有在每个构建都触发一个版本时才有效,但情况并非总是如此。
您知道用VSTS发送此通知的(更好)方法吗?
我是否使用正确的工具来做这类事情?
答案 0 :(得分:0)
您只能将电子邮件提醒发送给“环境所有者”& “发布创建者”,目前无法自定义电子邮件提醒中的内容,您可以在VSTS User Voice上提交功能请求。
Rest API是获取这些信息的好工具。但是您提到您对所有分支使用相同的版本定义。这根本不符合逻辑。不同的分支指的是项目的不同版本,为什么要将它们全部部署在一个发布管道中?如果将工作流配置为每个分支的一个版本定义,则分辨率将更加容易。您只需要获取以前版本的Build ID,然后在构建之后获取更改。您还可以添加一个powershell任务,为当前版本的TFVC / Git存储库创建一个标签/标签,以便您可以在标签/标签之间进行更改。