如何在VSTS发布完成后更新PR?及配置PR合并前置发布校验
关于VSTS拉取请求与发布集成的两个问题解答
问题1:如何在VSTS发布完成后更新拉取请求(PR)?
其实你有几种实用的方式来实现这个需求,核心是借助VSTS的REST API配合发布管道里的自动化任务:
- 在发布管道末尾添加PowerShell任务:等发布完成后,用这个任务调用VSTS的Pull Requests API来更新PR状态或者添加通知评论。
- 首先得拿到当前PR的ID——你可以在构建阶段把
Build.SourcePullRequestId这个系统变量传递到发布阶段,这样发布时就能直接复用。 - 调用
PATCH https://dev.azure.com/{org}/{proj}/_apis/git/repositories/{repoId}/pullrequests/{prId}?api-version=7.1-preview.1这个API,就能更新PR的整体状态;要是想给团队发个明确通知,也可以用POST https://dev.azure.com/{org}/{proj}/_apis/git/repositories/{repoId}/pullrequests/{prId}/threads?api-version=7.1-preview.1添加一条评论,说明发布已完成。
- 首先得拿到当前PR的ID——你可以在构建阶段把
- 利用内置状态检查功能:如果只是想让PR页面直观展示发布完成的状态,直接通过API给PR提交一个自定义成功状态即可,这样PR的状态面板里会清晰显示这个标记,所有人都能一眼看到。
问题2:能否通过外部服务提交成功状态,把VSTS发布成功设为PR合并到master的前置条件?
必须可以!这个需求刚好能借助VSTS的**状态检查(Status Checks)**功能实现,不管是用发布管道内的脚本还是外部服务都能搞定,我给你梳理下完整流程:
先在仓库配置状态检查规则:
- 进入仓库设置→拉取请求→分支策略,找到master分支的策略,添加一个自定义状态检查,给它起个唯一的名字(比如“生产环境发布成功”),然后勾选“需要通过此检查才能合并”——这样没通过这个检查的PR就无法合并到master分支。
在发布管道中添加状态提交任务:
- 等发布成功后,添加PowerShell或脚本任务,调用API向对应PR提交成功状态。使用这个API:
POST https://dev.azure.com/{org}/{proj}/_apis/git/repositories/{repoId}/pullrequests/{prId}/statuses?api-version=7.1-preview.1,请求体里要填上你之前设置的状态名称,并且把状态值设为succeeded。 - 这里要确保发布管道能关联到PR:构建阶段把
Build.SourcePullRequestId传递到发布阶段,这样发布时就能精准定位到对应的PR。
- 等发布成功后,添加PowerShell或脚本任务,调用API向对应PR提交成功状态。使用这个API:
验证完整工作流:
- 创建PR后,自动触发构建;构建成功后触发发布;发布完成时,脚本会给PR提交成功状态,此时PR的状态检查会显示通过,团队就能正常合并PR了。
- 如果发布失败,你也可以让脚本提交
failed状态,这样PR会被阻止合并,直到发布成功为止。
要是你想用外部服务来实现,也可以让外部服务监听VSTS的发布完成事件(通过Webhook),然后由外部服务调用上述API提交状态,效果完全一致。
内容的提问来源于stack exchange,提问作者Adam Johnson




