即使其中一项作业失败,如何将 azure devops 管道结果设置为成功

2024-04-19

我正在开发一个 Azure CD YAML 管道,以将 CI 管道的结果部署到虚拟机上。 现在,出于本文的目的,稍微简化一下,CD 管道非常简单,由一个包含 3 个作业的阶段组成:

  • 第一个作业运行脚本来停止某种复杂的应用程序。这有时会失败。
  • 仅当第一个作业失败时,第二个作业才会运行。这使管理员有机会进行手动干预(利用内置的)并修复第一份工作中遇到的问题。如果管理员愿意继续运行部署管道,他将恢复管道的运行。
  • 第三步是部署新版本的应用程序。

以下是 YAML 管道的整体结构:

jobs:
  - deployment: StopApplication
    environment:
      name: 'EnvA'  # This environment is a set of virtual machines running self-hosted Azure Agents.
      resourceType: VirtualMachine
    strategy:
          rolling:
            maxParallel: 1
            deploy:
              steps:
              - task: ...
  - job: ManualIntervation
        displayName: Manual intervention to fix issue while stopping application
        pool: server
        dependsOn: StopApplication
        condition: failed()  # This job will run only if job StopApplication has failed.
        timeoutInMinutes: 60 
        steps:
        - task: ManualValidation@0
          timeoutInMinutes: 50
          inputs:
            notifyUsers:
              [email protected] /cdn-cgi/l/email-protection
            instructions: 'Do something'
            onTimeout: 'reject'
  - deployment: DeployApp
        dependsOn:
        - StopApplication
        - ManualIntervation
        condition: xor(succeeded('StopApplication'), succeeded('ManualIntervation'))
        workspace:
          clean: all
        environment:
          name: 'EnvA'  # This environment is a set of virtual machines running self-hosted Azure Agents.
          resourceType: VirtualMachine
        strategy:
          rolling:
            maxParallel: 1
            deploy:
              steps:
              - task: ...

我遇到的问题是,如果第一个部署作业失败,但管理员检查问题、修复它、恢复管道的运行并且最后一个部署作业成功,Azure DevOps 将我的管道显示为失败(DevOps 中的红十字) Portal),我可以理解为其中一项工作失败了。 尽管如此,从功能上来说,部署成功了,因此我想设置/强制管道运行的结果为成功,以便 Azure DevOps 显示绿色复选标记。

有谁知道如何实现这一目标? 我认为这是可能的,否则我不会理解为什么我们有机会在管道中进行手动干预。


构建结果是只读的,构建完成后无法更新。但是,您可以查看以下解决方法来消除 Devops 门户中的失败标志(红十字)。

1, Use continueOnError对于任务在StopApplication工作。对于下面的例子:

jobs:
 - deployment: StopApplication
   ...
    steps:
    - task: taskName
       ...
      continueOnError: true

当 continueOnError 属性设置为 true 时。管道的结果将设置为SucceededWithIssues当任务失败时。您将看到一个感叹号而不是红十字

您还需要更改为condition为了工作ManualIntervation.

然后改变工作条件ManualIntervation检查标志变量是否设置为 true。见下文:

- job: ManualIntervation
  dependsOn: StopApplication
  condition: eq(dependencies.StopApplication.result, 'SucceededWithIssues')

2、另一种解决方法是将StopApplication与不同管道中的其他工作的工作。

您需要创建两个管道。第一个管道只有StopApplication工作。第二个管道包含其余作业。并使用第一个管道触发第二个管道rest api https://learn.microsoft.com/en-us/rest/api/azure/devops/pipelines/runs/run%20pipeline?view=azure-devops-rest-6.1.

在第一条管道中。在失败的任务之后执行一个 powershell 任务来检查作业状态并使用 REST API 触发第二个管道。请参见下面的示例:

 - powershell: |
      
      $body = @{
                templateParameters=@{
                    ManualIntervation= "false"
                }
              }

      if("$(Agent.JobStatus)" -eq "Failed"){
          $body.templateParameters.ManualIntervation='true'
      }
      $url = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/pipelines/{second-pipelineId}/runs?api-version=6.1-preview.1"
      $result5 = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $(system.accesstoken)"} -Method post -Body (convertto-json $body) -ContentType "application/json" 

    condition: always() #always run this task

然后在第二个管道中定义一个 ManualIntervation并设置工作条件ManualIntervation见下文:

parameters:
- name: ManualIntervation
  type: string
  default: false
  
...

- job: ManualIntervation
  dependsOn: StopApplication
  condition: eq('${{parameters.ManualIntervation}}', 'true') 

当第一个管道执行时。 powershell任务将触发第二个管道将模板参数请求体覆盖参数ManualIntervation在第二条管道中。如果ManualIntervation是真的。然后将执行 ManualIntervation 作业。

这样,即使第一个管道失败,第二个管道也会成功。

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

即使其中一项作业失败,如何将 azure devops 管道结果设置为成功 的相关文章

  • 通过提交消息关闭工作项

    有没有办法使用 VSTS 使用提交消息来关闭工作项 我尝试过 修复 123 关闭 123 或解决 123 但这仅将提交与工作项关联 所以基本上我正在通过 github 中的提交消息来查看关闭问题 https help github com
  • 如何解压或获取存储在 Azure DevOps Build Piplines 变量组中的嵌套变量的值?

    是否可以在 Powershell 脚本中的变量内使用 Azure Pipelines 变量 SCENARIO Azure Pipelines 变量组中设置了两个变量 DeploymentCredentials a DeployUATApiP
  • 在 Azure Pipelines 的 Ubuntu 代理上构建 Android 项目时,SDK 目录不可写

    我正在为 Android 项目配置构建管道 到目前为止 我的所有步骤都在 Hosted VS2017 代理上完美运行 包括获取代码 使用 gradlew 构建 发布工件并将其部署到 AppCenter 然而 在托管 Ubuntu 1604
  • VSO/VSTS:在主机代理上使用发布构建工件时出错

    使用 发布构建工件 任务时 构建中会引发以下错误 就在 获取源 之后 任务的定义没有与任何匹配的处理程序 由该代理支持 支持的处理程序 AzurePowerShell AzurePowerShellHandler PowerShell Po
  • 是否可以编写 TFS 查询来获取任务实际花费的时间?

    我一直在使用 TFS 来跟踪我的待办事项 现在我正在尝试编写一个查询来查看我在过去 7 天内完成特定任务所花费的时间 到目前为止我有这个查询 工作项类型 任务 AND 状态 完成 AND 关闭日期 Today 7 AND 区域路径 Proj
  • 下载 VSTS 附件

    有人知道如何使用 C 库检索附件 ID 并从 VSTS 下载 WorkItem 附件吗 我已经审查了附件样本 https github com Microsoft vsts dotnet samples blob master Client
  • VSTS 构建已过期

    我创建了一个拉取请求 它触发构建并且构建成功 但一段时间后我的构建状态更改为 构建已过期 因此要完成拉取请求 我需要再次触发它 所以问题是 为什么会发生这种情况以及如何避免构建过期 构建过期 是分支机构政策的一个特点 设置构建到期时间 以确
  • 将源代码从 git 迁移到 TFVC

    我们使用的是Visual Studio Online 我们使用TFS的git支持 我们现在想停止使用 git 并使用 TFVC 将源代码迁移到 TFVC 的最佳解决方案是什么 假设您正在 VSO 中创建另一个项目并移动源代码 按照目前的情况
  • Azure Pipelines 中的 NG 构建失败,出现 NPM 错误 134

    大约 50 的托管构建失败 并出现 npm 错误 134 我正在使用托管 vs2017 构建具有相同构建定义的相同提交 我正在使用 Angular CLI 构建 Angular 应用程序 npm 任务调用 run build 它在我的 pa
  • Pulumi Azure Pipeline 任务

    我是 Pulumi 的新手 所以目前我正在努力尝试在我的 Azure 发布管道中运行它以创建我的基础设施 在开发过程中 我使用本地存储来存储我的 pulumi 状态 pulumi login local 我已经创建了我的堆栈 dev 是其中
  • 如何在托管的 VSO 构建代理中设置 Node.js 和 NPM 版本号?

    在 Visual Studio Online 中 您现在可以在生成定义的 常规 选项卡上设置生成依赖项 但是 有没有办法设置Node js和NPM的版本 托管构建代理当前似乎正在使用 Node js v0 12 7 和 NPM v2 11
  • 在 Visual Studio 中查看 TFS 服务器端更改,无需获取最新版本

    在 Visual Studio 2010 中 我希望能够查看其他团队成员已签入的更改 而无需实际执行获取最新 这将覆盖本地文件 有没有办法对批量文件执行此操作 而不是选择每个文件并将其与服务器版本进行比较 我使用 查看历史记录 窗口 然后选
  • 无法读取文件内容

    我正在尝试读取文件的内容 releaseNotesPath System DefaultWorkingDirectory ccp develop ccp ccp ReleaseNotes ReleaseNotes latestRelease
  • 将 pdfmake.js 文件导入到我的 ts 文件中

    我正在开发 vsts 网络扩展 我想要一个使用PDFmake js文件来生成一个pdf PDFmake js文件是imported to node nodules文件夹通过安装为npm install pdfmake 我想要import t
  • Azure DevOps/VSTS 始终在干净的存储库上报告“DETACHED HEAD”

    Friends 我现在厌倦了 Azure DevOps VSTS Jenkins 好多了 现在仍然如此 只是我的组织想要使用 Azure DevOps 我有一个谜团需要帮助来解决 以下是我的笔记本电脑上的存储库 它没有未跟踪或未提交的更改
  • 如何仅在 PR 上触发构建,而不是在合并后在 Azure 管道上触发构建?

    这是向pyjanitor project https github com ericmjl pyjanitor 我已经构建了分为多个作业的管道 并且这些作业被设计为并行运行 但是 我注意到即使在合并 PR 后也会触发构建 因此 我的问题有两
  • VSO:具有分层区域结构的单一项目?

    历史上我们一直有各自的VSO正在开发的每个逻辑项目的项目 这一点尤其重要 因为我们需要为每个项目都有单独的积压工作 每个项目都有自己的产品负责人 我们有一个由大约 10 名开发人员组成的团队 他们在这些项目之间工作超过 2 周的冲刺 在使用
  • “目标计算机上的 PowerShell”任务失败,并在 TFS 2017\Azure Dev Ops 中出现错误

    我尝试使用 TFS 构建定义中的 目标计算机上的 PowerShell 任务来运行其中一台 Azure 服务器上存在的 PowerShell 脚本 但该任务失败并出现以下错误 System Management Automation Run
  • 如何在 Azure DevOps 中的运行未完成时更改其状态

    当我通过测试计划 gt 测试套件 gt 选择要执行的测试 gt 执行 gt 运行 Web 应用程序启动手动测试执行时 测试和反馈 浏览器扩展将启动 当由于任何原因我没有完成时测试执行并关闭 测试和反馈 窗口 系统将创建一个新的测试运行 可以
  • 将 TFVC 代码从一个集合移动到另一个集合(包括历史记录)

    我需要将一些代码从一个项目集合中的 TFVC 移动到另一个集合中的项目 我还需要保留签入历史记录 我不担心更改集 ID 但确实希望保留历史记录中的评论 人物和时间以及所做的更改 被移动到的项目将是空的 这将在本地使用 TFS2017 Upd

随机推荐

  • 如何从 JObject 获取第一个键?

    我在用Newtonsoft Json在我的项目中 我有JObject像这样 4781 Name 1 1577 Name 2 9973 Name 3 我成功解析它JObject Parse 我需要从此 JObject 获取第一个密钥 4781
  • Javascript CRC16 示例代码或实现

    有人可以分享一个链接或示例代码来实现 JavaScript 中字符串的校验和吗 预先非常感谢 你想要什么 你需要更具体 CRC16 算法数量众多 每种算法都有自己的多项式并用于特定用途 一些 CRC16 算法非常适合创建哈希 例如 对于 R
  • 如何在ggplot2中实现手绘铅笔填充? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我发现了这篇关于可视化的精彩博客文章 http www darkhorseanalytics com b
  • 进程的异步生成:设计问题 - Celery 或 Twisted

    全部 我正在寻求意见 指导 和设计理念 我的目标是找到一种精简但可靠的方法来从 HTTP POST 获取 XML 有效负载 这部分没有问题 对其进行解析 并异步生成一个相对寿命较长的进程 生成的进程是 CPU 密集型进程 将持续大约三分钟
  • Excel:如果在另一列中发现重复的单元格值,则突出显示绿色

    有人可以帮助我 我不知道该使用什么公式 我突出显示了图片中的单元格以展示我的意思的示例 What I want to do is highlight the cell in column A where the value matches
  • Python OrderedDict 不保持元素顺序[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 OrderedDict 对象 但我一创建它 元素就变得混乱了 这就是我所做的 from collections import OrderedDict od OrderedDict 0 0 2
  • Sublime Text 默认保存选项

    为什么当我在 Sublime Text 3 中保存文件时 默认保存位置是 Sublime 安装目录 为什么默认文件类型是什么 我想将默认保存位置设置为桌面并将默认文件类型设置为 txt 我该如何执行此操作 这是我的设置 font size
  • iOS 上的背景图像随着用户交互而闪烁 [Ionic 5]

    我正在尝试让背景图像在我正在从 Ionic 3 更新到 5 的多页 Ionic 应用程序上工作 除了加载的第一页之外 我在 iOS 上的任何页面上都遇到了闪烁的背景图像问题 我尝试实施这个解决方案 如何在 Ionic 中将图像同时放入 和
  • 应用程序在 Play 商店中上线后 Android 应用程序链接不起作用

    我已经根据以下链接实现了 Android 应用程序链接 https developer android com studio write app link indexing html https developer android com
  • 嵌套类模板特化

    A class template
  • 流星合并同一集合的光标

    在我的社交应用程序 如 FB 中 我有一个奇怪的需要 将同一集合用户的两个光标合并到一个发布中 Meteor 服务器打印此错误 发布函数为集合用户返回了多个游标 也许这在 Meteor 0 7 2 中无法完成 也许我的方法是错误的 但我发现
  • 如何在Python中获取Linux控制台窗口宽度

    python 有没有办法以编程方式确定控制台的宽度 我的意思是一行中不换行的字符数 而不是窗口的像素宽度 Edit 寻找适用于 Linux 的解决方案 不确定为什么它在模块中shutil 但它在 Python 3 3 中出现了 看 查询输出
  • 如何在 java 类方法或构造函数中插入前提条件?

    这是我正在上的 Java 课程 本书提到了前置条件和后置条件 但没有给出任何如何对其进行编码的示例 它继续讨论断言 我已经把它记下来了 但是我正在做的作业特别指出插入前提条件并用断言测试前提条件 任何帮助都会很棒 像 Eiffel 这样的语
  • 使用独立对齐和附加的 Listview 元素反应本机 Listview 网格布局

    我有一个关于 Listview 元素对齐的问题 这些元素应该以比行样式更盒装的样式显示 在图片中 您可以看到当前状态 这是通过使用 Listview 的 contentContainerStyle prop 中使用的样式表代码生成的 Lis
  • 带有默认参数的 Swift 选择器

    我在这里编写简单的代码 self navigationItem leftBarButtonItem UIBarButtonItem barButtonSystemItem UIBarButtonSystemItem Cancel targe
  • 使用 RabbitMq 锁定和批量获取消息

    我正在尝试以一种更非常规的方式使用 RabbitMq 尽管此时我可以根据需要选择任何其他消息队列实现 消费者不会将 Rabbit 推送消息留给我的消费者 而是连接到一个队列并获取一批 N 条消息 在此期间它会消费一些消息 并可能拒绝一些消息
  • System.DllNotFoundException:> gtk\bin\libgobject-2.0-0.dll

    我已经构建了一个 GUIGithub https github com saigkill PublicanCreators blob master src PublicanCreators Program cs 启动构建的解决方案后 我得到
  • 如何声明 RSpec 中示例之间共享的变量?

    假设我有以下规格 describe Thing do it can read data do data get data from file 42 36 expect data count to eq 2 end it can proces
  • PHP代码没有被执行,但是代码显示在浏览器源代码中

    我正在尝试在项目上执行一些 PHP 代码 使用 Dreamweaver 但代码未运行 当我检查源代码时 PHP代码显示为HTML标签 我可以在源代码中看到它 Apache 运行正常 我正在使用 XAMPP PHP 页面可以正确打开 但 PH
  • 即使其中一项作业失败,如何将 azure devops 管道结果设置为成功

    我正在开发一个 Azure CD YAML 管道 以将 CI 管道的结果部署到虚拟机上 现在 出于本文的目的 稍微简化一下 CD 管道非常简单 由一个包含 3 个作业的阶段组成 第一个作业运行脚本来停止某种复杂的应用程序 这有时会失败 仅当