【问题标题】:In an Azure DevOps release pipeline with several jobs, can I capture the status of the previous jobs in a script?在包含多个作业的 Azure DevOps 发布管道中,我可以在脚本中捕获以前作业的状态吗?
【发布时间】:2019-07-18 11:18:30
【问题描述】:

在我的 Azure DevOps 发布管道中,我有一个 powershell 脚本,它向另一个应用程序发送 REST 请求,状态为“失败”或“成功”。

如果之前的任何作业失败,我希望状态发送“失败”。所以基本上是这样的:

if (($Agent  -eq "Succeeded") -and ($LastJobsFailed -ne "true")) {
   $change_status="successful"
}
else {
   $change_status="failed"
}

现在我知道 Azure Devops 在某处使用此状态,因为您可以根据上次作业的结果指定作业是否开始。

作为一种解决方法,我将脚本复制了两次,状态为“成功”,并且仅在所有作业都成功时运行,反之亦然。但是我想在一个脚本中完成所有事情:)

所以我希望可以找到包含所有以前工作状态或其他内容的列表。 有人有什么想法吗?

谢谢!

【问题讨论】:

  • 你有多少个阶段(环境)?
  • 我不确定这是否适用。 powershell 命令的任何异常都保存在 $error 变量中。它实际上是一个对象数组,最新的例外是 $error[0]。您必须将其传送到 format-list -force 以查看所有属性。
  • @ShaykiAbramczyk 这里的用例是逻辑在一个由多个作业组成的暂存环境中运行。有点像下面 Lu Mike 的回答。
  • @Jay05 如果您只有一个阶段,您可以添加另一个带有一个任务的阶段来检查第一阶段的错误/成功。

标签: powershell azure-devops azure-pipelines-release-pipeline


【解决方案1】:

我认为您不需要在 powershell 脚本中检查以前作业的状态。一种解决方法是,您可以创建一个作业(名为 jobSendOK),将运行条件指定为“仅当所有先前的作业都成功时”,并创建另一个作业(名为 jobSendNG),将运行条件指定为“仅当以前的工作失败了”。 在jobSendOK中,添加一个发送“成功”的powershell任务,而jobSendNG有一个发送“失败”的powershell任务。

【讨论】:

  • 感谢陆迈克的回答。这实际上是我所做的确切解决方法,并且确实可以完美运行。问题是您仍在维护 2 个脚本,这就是为什么我发布问题以查看是否有更好的方法。如果不是,那么我会将其标记为已接受的答案:)
  • 另一种方法是使用REST API通过powershell脚本获取作业信息,然后分析响应数据(json)以获取作业状态。在我看来,这比这种方式更复杂。
  • 实际上我尝试访问 REST API 来获取工作信息,但真的找不到方法。如果我弄清楚了,我会发布一个链接。你有什么想法陆迈克?
  • @Jay05,你可以看看apiGet Release。它会得到关于任务的所有状态信息。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2018-10-24
  • 2021-01-20
相关资源
最近更新 更多