【问题标题】:How to schedule deployments on a stage without creating a new release every day?如何在不每天创建新版本的情况下在舞台上安排部署?
【发布时间】:2020-03-09 11:57:24
【问题描述】:

我在 azure-devops 中有一个用于存储库的部署管道,它可以与发布计划配合使用。但问题是,它会为每个预定时间创建一个新版本,即使第二天工件没有更改。即,如果存储库一个月没有更新,我有大约 30 个相同工件的新版本。

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

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

我错过了什么吗?

【问题讨论】:

  • 嗨@rockin'n 设计一个新版本将被创建。请查看以下解决方法。

标签: deployment azure-devops


【解决方案1】:

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

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

1, 下面是一个在 powershell 脚本中重新部署一个发布阶段的示例。

您可以参考here的步骤获取Person access Token(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

【讨论】:

    【解决方案2】:

    发布管道可以选择仅在源更改时设置计划发布。

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

    【讨论】:

    • 不过,这并不是我所需要的。如果我按照你说的做,那么只有在源发生变化时才会触发新的部署。有时 repo 没有更新,但仍需要部署到我们的测试阶段。 (为了节省成本,这个测试阶段每晚都会被删除)
    猜你喜欢
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2019-06-17
    • 2021-11-01
    • 2012-01-25
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多