Azure DevOps 多阶段管道陷入等待批准状态

2023-12-04

我将托管的 Azure DevOps 与 Azure Git Repos 中的代码一起使用。我们曾经使用“经典”的基于 UI 的管道编辑器,但在构建/发布阶段正在转向 YAML 模板。

过去,我配置了 CI/CD,以便当代码通过拉取请求提交到主分支时,它将触发构建,然后触发开发部署。其他发布阶段将等待批准,然后代码才会移至该阶段。新版本将取消任何尚未部署到各自环境的先前版本。

对于 YAML 部署阶段,我发现当主分支触发构建时,它会部署到开发环境,但管道陷入等待状态,因为其他阶段尚未获得批准。因此,运行不会被标记为“完成”,最终其他阶段将超时并被标记为失败。此外,管道的先前运行不会被取消,因此多个运行会堆积在等待状态。

理想情况下,我希望看到的是新的构建将取消管道之前的所有运行。我希望在部署到开发后看到运行标记为“完成”,并且能够在事后手动部署到其他阶段。

还有其他人想做同样的事情吗?我是否只是认为这一切都是错误的,应该以不同的方式来做?


目前 yaml 管道不支持手动部署到阶段。请检查这个开放问题.

您可以尝试添加依赖于取决于 and 状况每个阶段。对于下面的示例 yaml 管道。阶段Build仅在阶段结束后才开始运行Start成功完成后,阶段构建将等待批准,只有阶段构建获得批准并成功完成后,才会触发阶段发布。

您可以定义公关触发并设置autocancel=true(默认为 true)如果新更改被推送到同一个 pr,则取消先前的运行。

The batch财产为trigger可以达到类似的效果。如果当前 pr 仍在构建中,则不会启动新的运行。

trigger:
  batch: boolean # batch changes if true (the default); start a new build for every push if false
  branches:
    include:

_

pr:
  autoCancel: true
  branches:
    include:
    - master

stages:
- stage: Start
  jobs:
    - job: A
      pool:
        vmImage: windows-latest
      steps:
      - powershell: |
          echo "i am job a"

- stage: Build
  dependsOn: Start
  condition: succeeded()
  jobs:
  - deployment: Dev
    displayName: deploy Web App
    pool:
      vmImage: 'Ubuntu-16.04'
  # creates an environment if it doesn't exist
    environment: 'Dev'
    strategy:
    # default deployment strategy, more coming...
      runOnce:
        deploy:
          steps:
          - script: echo "i am dev environment"


- stage: Release
  dependsOn: Build
  condition: succeeded()
  jobs:
  - deployment: Environ
    displayName: deploy Web App
    pool:
      vmImage: 'Ubuntu-16.04'
  # creates an environment if it doesn't exist
    environment: 'Environment'
    strategy:
    # default deployment strategy, more coming...
      runOnce:
        deploy:
          steps:
          - script: echo "i am Environment environment"

Update: 通过 powershell 脚本取消正在进行的构建.

您可以在管道顶部添加一个 powershell 任务来调用构建API。下面的脚本获取所有正在进行的构建并取消它们(当前构建除外)。

- 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
          }

为了让您的管道有权取消当前正在运行的构建。您需要转到管道,单击 3dots 并选择管理安全性

enter image description here

然后设置停止构建s 允许用户的权限项目集合构建服务(projectName),

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure DevOps 多阶段管道陷入等待批准状态 的相关文章

  • 如何在 YAML 中阻止注释?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 如何在 YAML 中注释一行行 YAML 支持内联注释 但不支持块注释 From 维基百
  • 运行顺序构建管道作为 Azure Devops 中拉取请求分支策略的一部分

    我在 Azure Devops 中有两个管道 管道 A 在提交到 master 时触发并生成一组工件 管道 B 在管道 A 成功完成后触发并消耗其工件 只要正常提交到 master 这一切都可以正常工作 但是 如果我创建一个分支验证策略 强
  • Google 应用引擎 100 个 URLMap 条目限制

    我一直在使用Google应用程序引擎来构建我的网站 并遇到了关于URLMap最大数量的问题 我有101个URL 但限制是100 这是错误消息 Fatal error when loading application configuratio
  • 如何使用 Azure DevOps REST API 创建新的构建管道?

    我正在尝试以编程方式创建新的构建管道 我正在寻找用于此操作的 Azure DevOps REST API 我没有获得使用 REST API 创建管道的正确示例 请指教 如何使用 Azure DevOps REST API 创建新的构建管道
  • 使用 yaml 路由描述时如何在运行时获取 Symfony2 中的路由名称?

    在这里你可以找到我的n关于 Symfony2 的第一个问题 我正在与一个分页捆绑 https github com makerlabs PagerBundle wiki使用中提供的路由名称routing yml文件 从我的角度来看 这种方法
  • YAML 每个缩进有多少个空格?

    如果我在每个缩进级别使用一个空格 两个或四个空格 有什么区别吗 YAML 每个结构类型的空间数量有什么具体规则吗 例如4嵌套空间maps 1每空间项目清单 etc 我正在为 elastic beanstalk ebextensions 编写
  • 如何在 YAML 文件中为简单的 POJO 定义映射?

    我在用蛇YAML https bitbucket org snakeyaml snakeyaml将某些配置 属性值解析为配置对象 下面定义 我的 YAML 文件如下所示 Thread batchLimit 1000 threadCountL
  • 前面的冒号:YAML 语法

    我目前在项目中使用 Sidekiq 并且有以下 YAML 配置文件 concurrency 5 pidfile tmp pids sidekiq pid logfile log sidekiq log staging concurrency
  • Jekyll + GitHub Pages 网站中的尾部斜杠导致 404

    我希望在我的网站上解析以下所有 URL 该网站是使用 Jekyll 构建并托管在 GitHub Pages 上的 https michaeledelstone com about https michaeledelstone com abo
  • YAML 中的映射键标识符允许使用字符吗?

    键中允许和不允许使用哪些字符 即example in example Value 在 YAML 中 根据 YAML 1 2 规范 仅建议使用可打印字符 并排除显式控制字符 see here http www yaml org spec 1
  • 在私有管道中设置 VSTS 代理的 docker 权限

    我已经使用 Linux 虚拟机设置了专用管道 并且安装了代理 并且在门户中显示代理处于活动状态 我也安装了docker 在同一台机器上 如果我使用 sudo docker 它就可以工作 所以我确信 VSTS 代理运行命令时存在权限问题 不确
  • Visual Studio Team Services 持续集成:NuGet 恢复任务失败

    我正在使用 Team Services 中的持续集成功能 以前是 Visual Studio Online 我的构建定义针对解决方案 而不是整个解决方案 中的特定项目 即 ClientUI MVC 网站 该解决方案包含三个项目 Client
  • 将某些项目从一个用户帐户移动到另一个用户帐户

    我要换工作公司 但我会继续从事同样的项目 我在 Azure DevOps 上有一些使用 Git 的项目 还有另一个使用 TFVC 的项目 我使用过这些集成在 Visual Studio 上的源代码控制工具 但从未使用过控制台命令 我想将源代
  • 在 Azure Pipelines 托管的 Linux 代理上运行 Cypress.io

    我正在尝试在 Azure Pipelines 的托管 Linux 池上运行 Cypress 测试 不幸的是 托管代理没有安装 Cypress 的所有依赖项 运行记录的apt get不起作用 2018 05 18T21 03 14 74233
  • 在yaml中写入#(在字符串中)

    我是新使用 yml 文件 用于我的框架中的翻译 我试图在翻译中添加一个 将是一个推特分享 blabla 这可能吗 因为文件将其翻译为评论 只需将值放在单引号或双引号内 它就不会被视为注释 就像是 en twitter share hasht
  • 无需别名的 Ruby YAML 编写

    我正在从 ruby 将数据写入 yaml 文件 并且经常在该文件上添加别名 像 id001 somekey somevalue id001 就我而言 我使用 yaml 文件来aid可读性并将名称添加到文件中的值 因为现有数据只是 没有键的分
  • VSTS Build - 根据拉取请求中修改的文件选择运行哪些单元测试

    我想根据触发管道的 PR 中修改的文件来控制 VSTS 构建管道中运行的单元测试 有没有办法检测在为该 PR 触发的 VSTS 构建期间拉取请求中修改了哪些文件 然后根据该信息选择要运行哪些测试 是的 这是可能的 手动方法 一种方法是在管道
  • 如何在 Team Foundation Service 中查看早期代码审查的评论?

    我正在将 Microsoft 的在线 Team Foundation Service 与 Visual Studio 2012 Premium 结合使用 几个月前 我为一位同事进行了代码审查 现在同一个项目又进行了一次代码审查 我希望能够查
  • 如何将对象数组定义为参数?

    我很新Swagger 所以这可能是一个基本问题 我可以为采用整数数组作为参数的 API 创建 yml 文件 如下所示 Add samples tags MY API parameters name my id in path type in
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for

随机推荐

  • bitParity - 查找整数中的奇数位

    我必须创建一个函数bitParity int x 接受一个整数并返回1如果有奇数个0的位形式为x and 0否则 Ex bitParity 5 0 bitParity 7 1 然而 这很困难 因为我只能使用位运算符来解决这个问题 lt lt
  • 我想在 Rstudio 中更改 --max-ppsize

    我读过了如何在 R 中设置最大 ppsize 我也有同样的问题 我目前在 Rstudio 工作 我需要将 max ppsize 设置为更大的值 这是我的方法 gt setwd C Program Files R R 3 3 1 bin gt
  • Emacs 用增量序列替换正则表达式

    我正在尝试找出一种方法 将文本文件中的字符串替换为增量超过 1 的数字 我正在尝试将以下几行转为这样 result A in S1 S2 txt result A in S1 S2 txt result A in S1 S2 txt res
  • php mPDF,无法设置字体系列和字体大小

    好吧 在花了这么多时间阅读他们的文档和我的测试之后 我决定向 SO 社区寻求帮助 我使用 mPDF 从 HTML 生成 pdf 图书馆工作正常 pdf 已生成等 但我无法根据需要设置字体系列和字体大小 我尝试过的代码 mpdf new mP
  • shell编程中的“导出”有什么作用? [复制]

    这个问题在这里已经有答案了 据我所知 无论前面是否有 export 变量赋值都是相同的 这是为了什么 导出的变量如 HOME and PATH可供 shell 运行的其他程序使用 继承 并将它们导出为环境变量 以及这些其他程序运行的程序等
  • 使用当前连接从 sql 存储过程调用 dll 函数

    我可以使用打开的连接从存储过程调用 dll 吗 我有一个从 SQL Server 获取数据的 dll 当我从存储过程调用它时 我不想打开新连接 谢谢 这是一个例子 public class Class1 public static SqlS
  • JavaScript Promise .then() 在事件循环中到底是如何处理的?

    我对如何将以下测试代码放入 JS 事件循环中感到困惑 var p1 new Promise function resolve reject setTimeout function resolve 1 100 var p2 new Promi
  • 用JS从outlook导入联系人

    我需要将 Outlook 中的联系人导入到 Web 应用程序中 我认为用JS可以做到这一点 但我不知道如何做 谁能给我一个解决我的问题的示例代码 您可以使用activex和javascript导出outlook联系人 但需要用户在浏览器中启
  • 如何将H2数据库嵌入到交付给客户端的jar文件中?

    我在嵌入式模式下使用 H2 数据库作为桌面应用程序 当我将应用程序压缩到 jar 文件中时 数据库文件被省略 因此 当我运行 MyApplication jar 时 没有任何效果 将 h2 jar 文件嵌入 包含 连接 MyApplicat
  • 删除 JSON 中的 Null 值并更新 JSON

    我通过使用 Newtonsoft 序列化列表将 JSON 数组作为字符串 如下所示 ID 1 Name somename Class 12 Section null ID null Name somename Class 13 Sectio
  • MapView 上的 java.util.ConcurrentModificationException

    fellas 很多天以来我都面临着非常奇怪的问题 我正在尝试经常更新覆盖 因此 有时当我触摸地图时 我会收到 java util ConcurrentModificationException 或者有时当地图尝试更新叠加层时 我会收到 ja
  • 如何使用 Json.NET 序列化和反序列化数组的 ArrayList

    我需要在应用程序中使用 JSON NET 将对象序列化 反序列化为 json Object 具有 ArrayList 属性类型 其中包含字符串数组 为了模拟它 我编写了以下单元测试 public class JsonTests public
  • 仅在释放模式下按 HOME 时才会终止 Activity

    首先 我有两个 Activity Splash 和 MainActivity 仅支持纵向 在 MainActivity 中 我有很多片段使用幻灯片菜单 我想在用户离开 MainActivity 时保留当前片段 这是我的尝试 int curr
  • 无法在 CodeIgniter 中使用会话类检索会话 ID

    我的控制器中有这段代码 class Upload center extends Controller function construct parent Controller this gt load gt model auth model
  • 在 Automator 中编辑文本

    我想创建一个 Automator 服务 它可以获取所选文本并将其替换为编辑后的版本 i e 所选文本将类似于 这是所选文本 然后输出将采用该文本并输出类似 一些预定义的开始 这是选定的文本 这是选定的文本 我以前曾对文件名做过类似的事情 但
  • 如何使用 PHP Bitly v4 缩短 URL?

    我有 Bitly 的代码v3并且运行良好
  • RedirectToAction 不是重定向

    这不应该起作用吗 如果我最后有一个断点 它停在那里 但永远不会到达ContactAction 发布后的页面只是一个空白页面 没有源代码 我错过了什么 谢谢 您的联系人 ContactModel 模型 不应为 void 而应为 public
  • 如何将数据从应用程序发送到AppWidgetProvider?

    我陷入了一个特定的场景 用户从应用程序更新时间后 我需要立即更新我的小部件 我确实尝试通过 Intent Extras 发送数据来进行广播 但失败了 目前 我的数据在AppWidgetProvider我需要将此数据发送到服务 public
  • 更改 LISP 中列表的副本

    在 LISP 中 我有一个传递列表的函数 我想更改此列表的元素而不更改原始列表 通常情况下 我会使用copy list创建我将更改的列表的本地副本 但这似乎不起作用 CL USER gt defun test item let copy c
  • Azure DevOps 多阶段管道陷入等待批准状态

    我将托管的 Azure DevOps 与 Azure Git Repos 中的代码一起使用 我们曾经使用 经典 的基于 UI 的管道编辑器 但在构建 发布阶段正在转向 YAML 模板 过去 我配置了 CI CD 以便当代码通过拉取请求提交到