如何在一个阶段安排部署而不每天创建一个新版本?

时间:2020-03-06 08:19:45

标签: deployment azure-devops

我在azure-devops中有一个用于存储库的部署管道,并且可以按发布时间表正常工作。但是问题是,即使工件第二天没有更改,它也会为每个计划的时间创建一个新版本。即,如果存储库一个月都没有更新,那么我将为同一个工件提供大约30个新版本。

我们需要这种类型的计划部署的原因是,每晚我们都会从目标资源组中删除所有已部署的项目,并且每天早上有人/某物需要将最新版本再次部署到目标阶段。

我在部署前的条件下启用了阶段计划,并为其设置了一个时间(上午08:00),第二天计划为上午08:00(并部署)。但是看起来第二天不会触发其他部署。 (如果没有较新的版本)。

我在这里想念东西吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

发布管道有一个选项,可以仅在源发生更改时设置计划的发布。

可能需要重组CI / CD流程或创建新的发行版定义。

enter image description here

答案 1 :(得分:0)

由预定发行触发器触发的发行将创建一个新发行。这是设计使然,无法更改。查看文档Releases in Azure Pipelines,了解更多信息。

如果您要按计划重新部署到某个阶段而不创建新发行版。作为解决方法,您可以编写脚本来调用release environment update rest api。并在计算机上设置任务计划以运行此脚本。

1,以下是在Powershell脚本中重新部署发布阶段的示例。

您可以参考步骤here以获得人员访问令牌(PAT)。

您可以使用Release get api来获取环境ID。

$url ="https://vsrm.dev.azure.com/{organization}/{project}/_apis/Release/releases/{releaseId}/environments/{environmentId}?api-version=5.1-preview.6"

$pat ="{PAT}"

$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($pat)"))

$body='{"status": "inProgress"}'

Invoke-RestMethod -Uri $url -Headers @{authorization = "Basic $base64AuthInfo"} -ContentType "application/json" -Method patch -Body $body

在该线程中有another example通过rest api重新部署阶段。请检查一下。

2,完成上述脚本后,需要设置任务计划以运行以上脚本。请检查此处的详细步骤,以在Windows计算机上Configure to run a PowerShell Script into Task Scheduler