我正在尝试建立一个分支策略,其中在完成请求请求之前的构建验证必须确保构建和发布管道成功。我可以使CI管道失败,但是如果部署失败,我想使CI管道失败。我该怎么做呢?
我在CI管道.yaml之外有一个单独的Release管道。
谢谢
答案 0 :(得分:1)
您可以设置目标分支的构建验证。它将强制您选择的构建管道与请求请求提供的文件一起运行。
https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops
对于发布管道,添加Pull Request触发器并设置目标分支。它将使用您构建管道中的工件。
如果任何失败,拉取请求将被停止。
附加说明(与您的问题不完全相关)。 在Azure DevOps REST API中,存在端点,当您不想使管道失败而希望停止拉取请求时,可以在特定情况下将拉取请求状态更改为例如“已放弃”状态。
答案 1 :(得分:0)
我可以使CI管道失败,但如果 部署失败。
不确定您过去如何使配置项失败,但是一旦部署失败,我有一种方法可以帮助您实现这一目标。
我写了一个简单的扩展,它将扩展发布工作添加到发布管道中。参见我的github仓库merlinLia/PostJob-extension。
{
"id": "release-octane-pipeline-end-decorator",
"type": "ms.azure-pipelines.pipeline-decorator",
"targets": [
"ms.azure-release-pipelines-agent-job.post-job-tasks"
],
"properties": {
"template": "release-decorator.yml"
}
}
这将在发布管道中添加其他自定义的后期作业release-decorator.yml
,并且只能在所有定义的任务完成后才能运行。
在您的方案中,您可以与此管道装饰器一起应用。并将condition添加到release-decorator.yml中,例如,仅在您之前的任务失败后才能运行此自定义的发布作业。
并且,在此自定义的职位定义中,您可以采用使CI失败的想法,包括powershell脚本。
我的扩展程序仅用于我自己,因此我没有在市场上公开它。您可以参考我的代码并创建自己的代码。
更新以获取我的想法摘要。
由于您只需要严格的请求请求策略,如果部署失败,则不应允许请求请求完成。
根据我的建议,您可以在所有部署任务完成后运行一个任务。在此任务中,它首先获得先前的部署任务状态。当获得上一个任务失败的命令时,它将运行一个脚本来更改拉取请求的状态,例如Abandoned
。
结合我的原始想法,您可以创建一个扩展,它将自动将一个职位发布到管道中。通过在脚本中设置 condition (脚本),此作业将自动完成工作(修改请求请求),并且可以自己定制该条件,包括仅某些项目可以将此后期作业应用到管道中。
修改PR的api(由于可以使用预定义变量获取参数,因此可以在所有项目的管道中应用):
PATCH
$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/git/repositories/$($env:BUILD_REPOSITORY_ID)/pullrequests/$($env:BUILD_PULLREQUEST_ID)?api-version=5.1
请求正文(Abandon
):
{"status":2}