Azure Devops 发布管道 - 在执行前一个版本时排队新版本
Azure Devops Release pipeline - Queue new release when previous is executing
我们的发布管道配置了多个阶段。对于合并到 master 中的每个拉取请求,都会自动创建一个新版本。
我们有 DEV => TST => REL => PRD
.
现在,我们还使用这些阶段来执行自动化测试。所以在DEV之后有一个阶段可以做一些基本的自动化测试(AT)。
所以我们最终得到 DEV => AT => TST => REL => PRD
。
AT 依赖 DEV 到 运行 没有失败。
Screenshot of our release pipeline
我们的问题如下。当版本 X 正在执行 AT 时,同时拉取请求被合并,导致版本 X+1 部署到 DEV,这会导致版本 X 的 AT 失败。有没有办法让版本 X+1 在队列中等待,直到版本 X 完成 AT?
我们或许也可以通过避免部署期间 DEV 停机来解决这个问题,或者在不受自动化部署影响的环境中隔离测试等。但是基于我们所拥有的,以及我们可以改进的时间我们想知道是否有一种方法可以让管道的实例更加了解彼此...
But based on what we have, and the time we have available to improve
this we would like to know if there is a way to make instances of a
pipeline a bit more aware of each other...
抱歉,恐怕我们暂时没有这样的 out-of-box 功能。
这里是 one discussion about similar topic, you can track it and comment there to share your feedback. (Since that one is for build pipeline instead of for release, you can post a new feature request 发布管道)
作为临时解决方法:
您可以将AT阶段的步骤移至DEV阶段。创建代理作业AT
并将AT阶段的内容移动到DEV阶段的AT作业中,并确保在Pre-deployment conditions
下的Deployment queue settings
中禁用并行stage-deployment:
此设置适用于 stage-level 但不适用于 release-level。因此,只有当您将 AT 阶段的内容移至 DEV 阶段时,它才有效。 (你也可以从这个 中得到提示)
在盖茨中调用 azure devops rest api:
1.Create一个Generic service connection
:
Url: https://vsrm.dev.azure.com/OrgName/ProjectName/_apis/release/releases/3?api-version=5.1
将用户名和密码留空。
2.Change默认"AuthToken": "$(system.AccessToken)"
到"Authorization": "Bearer $(System.AccessToken)"
.
然后剩下的 api 将使用当前上下文中的令牌执行。
我们的发布管道配置了多个阶段。对于合并到 master 中的每个拉取请求,都会自动创建一个新版本。
我们有 DEV => TST => REL => PRD
.
现在,我们还使用这些阶段来执行自动化测试。所以在DEV之后有一个阶段可以做一些基本的自动化测试(AT)。
所以我们最终得到 DEV => AT => TST => REL => PRD
。
AT 依赖 DEV 到 运行 没有失败。
Screenshot of our release pipeline
我们的问题如下。当版本 X 正在执行 AT 时,同时拉取请求被合并,导致版本 X+1 部署到 DEV,这会导致版本 X 的 AT 失败。有没有办法让版本 X+1 在队列中等待,直到版本 X 完成 AT?
我们或许也可以通过避免部署期间 DEV 停机来解决这个问题,或者在不受自动化部署影响的环境中隔离测试等。但是基于我们所拥有的,以及我们可以改进的时间我们想知道是否有一种方法可以让管道的实例更加了解彼此...
But based on what we have, and the time we have available to improve this we would like to know if there is a way to make instances of a pipeline a bit more aware of each other...
抱歉,恐怕我们暂时没有这样的 out-of-box 功能。
这里是 one discussion about similar topic, you can track it and comment there to share your feedback. (Since that one is for build pipeline instead of for release, you can post a new feature request 发布管道)
作为临时解决方法:
您可以将AT阶段的步骤移至DEV阶段。创建代理作业AT
并将AT阶段的内容移动到DEV阶段的AT作业中,并确保在Pre-deployment conditions
下的Deployment queue settings
中禁用并行stage-deployment:
此设置适用于 stage-level 但不适用于 release-level。因此,只有当您将 AT 阶段的内容移至 DEV 阶段时,它才有效。 (你也可以从这个
在盖茨中调用 azure devops rest api:
1.Create一个Generic service connection
:
Url: https://vsrm.dev.azure.com/OrgName/ProjectName/_apis/release/releases/3?api-version=5.1
将用户名和密码留空。
2.Change默认"AuthToken": "$(system.AccessToken)"
到"Authorization": "Bearer $(System.AccessToken)"
.
然后剩下的 api 将使用当前上下文中的令牌执行。