【问题标题】:Make tasks fail in Azure Devops pipeline when git commands fail当 git 命令失败时,使 Azure Devops 管道中的任务失败
【发布时间】:2022-07-15 02:27:36
【问题描述】:

当 git 命令返回意外和不需要的结果时,我正在寻找一种优雅或不优雅的解决方案,以解决 ADO 管道中的步骤失败。一般来说,我使用 bash 任务调用 git,如下所示:

steps:
- bash: |    
    git merge ${{ parameters.sourceBranch }}

如果合并失败,我希望这一步在我的 ADO 管道中失败。我该怎么做呢?

【问题讨论】:

  • git merge 在冲突或其他失败时退出非零值;正如 bash 所报告的,我不知道如何让 azure 尊重命令的退出状态。请注意,bash 有自己的退出状态,默认情况下以最后执行命令的状态退出,所以鉴于您在此处显示的内容,如果 git merge 以状态 1 退出,bash 也会以状态退出1. 通常 0 = 成功,任何非零值 = 失败,但我们回到“Azure 到底做了什么”(我不知道)。
  • @Zeek Aran 我可以检查一下 - 您是否尝试按原样运行任务,并找出合并失败时管道的作用?
  • @VinceBowdren 是的,我在这里是因为我的一些 git 命令在过去几个月里一直默默地失败。哎呀!设置和我上面的完全一样,ADO 根本不在乎。

标签: azure-devops azure-pipelines


【解决方案1】:

鉴于 git merge 命令的结果在 bash 上不应该成功,我创建了以下 bash 条件。如果结果正确,则不执行任何操作,否则将返回 bash 的退出

if git merge ${{ parameters.sourceBranch }} > /dev/null 2>&1; then
        echo success
else
        exit 1
fi

【讨论】:

  • 这一步失败了!谢谢你。你能解释一下这部分吗? /dev/null 2>&1 好像吃掉了失败信息。如果可能的话,我想让它在失败时返回出口 1,并且还包括来自 git 的失败消息。
  • @ZeekAran 正确,您可以执行msg=$(git merge ${{ parameters.sourceBranch }} 2>&1) 然后打印$msg
【解决方案2】:

仅通过为输出设置一个变量就找到了一个有点优雅的解决方案:

git merge ${{ parameters.sourceBranch }}
status=$?
[ $status -eq 0 ] || exit $status

$?是最后一个状态码。下一行说“如果最后一个状态为 0,则继续,否则/或:退出该状态码”。

【讨论】:

    【解决方案3】:

    failOnStderr 会起作用吗?看起来您使用的 bash 步骤与此处的脚本类似。

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 2020-11-09
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2021-08-09
      相关资源
      最近更新 更多