如何在circle-ci / azure-pipeline / any-other-ci中禁用master上的build-concurrency?

问题描述

同时运行部署脚本被认为是一个错误。

我无法在circle-ci,azure-pipeline,code-fresh等中找到解决方案。

Bitbucket-pipelines有一个非常好的解决方案:

  • 针对特定环境仅运行一个部署脚本
  • 新版本将自动停止旧版本(运行中)

当我想移出位桶时,直到找到其他具有此基本功能的配置项,我才能这样做。


也许我遗漏了一些东西,因为据我所知,所有CI本身在部署其新功能时也必定会遇到此问题。除非他们使用jenkins并锁定项目哈哈...

解决方法

我认为您可以使用天蓝色的发布管道来实现这一目标。

如果要使用Classic UI Azure release pipeline.,则可以通过配置 Deployment queue settings (部署队列设置)来在新版本排队时停止旧版本。请参见下面的屏幕截图:

1,设置Maximum number of parallel deployments以控制并行部署。选中部署最新部署并取消其他部署,将仅部署最新的排队部署。先前所有排队(尚未运行)的部署将被取消。但是,如果先前的部署正在运行。除非您手动将其删除,否则最新的排队构建将必须等到运行的构建完成后才能使用。

enter image description here

如果要取消运行的较早版本,可以添加脚本任务以调用rest api来取消先前的运行版本。请参阅以下yaml管道示例中的示例:

2,要仅部署到一个目标,可以在 deployment group作业

中如下配置部署目标

enter image description here

如果要使用Yaml Pipleline。 yaml管道不支持Deploy latest and cancel othersDeployment group jobs。看到此使用语音here

在Yaml管道中,可以改为使用deploy jobsenvironments。您可以为环境配置Define approvals and checks,以启用Exclusive lock,以确保一次只运行一次到该环境。并配置deployment strategy来设置maxparallel部署。

要取消运行的旧版本,可以添加脚本任务来调用rest api。请参见下面的示例:有关更多信息,请查看我对this thread的回答。

- task: PowerShell@2
  inputs:
        targetType: inline
        script: |
          $header = @{ Authorization = "Bearer $(system.accesstoken)" }
          $buildsUrl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds?api-version=5.1"
          echo $buildsUrl
          $builds = Invoke-RestMethod -Uri $buildsUrl -Method Get -Header $header
          $buildsToStop = $builds.value.Where({ ($_.status -eq 'inProgress') -and ($_.definition.name -eq "$(Build.DefinitionName)") -and ($_.id -ne $(Build.BuildId))})
          ForEach($build in $buildsToStop)
          {
            echo $build.id
            $build.status = "cancelling"
            $body = $build | ConvertTo-Json -Depth 10
            $urlToCancel = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$($build.id)?api-version=5.1"
            echo $urlToCancel
            Invoke-RestMethod -Uri $urlToCancel -Method Patch -ContentType application/json -Body $body -Header $header
          }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...