Github Actions - 有没有办法在获得正确反馈的同时继续出错?

geo*_*k24 9 continuous-integration continuous-deployment github-actions

我是 Github Actions 的新手,我正在尝试找到一种方法来实现以下功能:每当一个步骤失败时,它会显示它失败(将提供正确的反馈),但仍会继续执行其他步骤。

目前,失败导致步骤停止:

步骤失败阻止下一步开始

我见过最流行的建议是使用 continue-on-error,但这似乎使该步骤的结论为“成功”,除非您进入日志,否则不会显示它失败。

失败的步骤似乎是成功的

在上面的屏幕截图中,“秘密”步骤失败了,但除非输入日志,否则它似乎是成功的。

在阅读此线程时,我开始怀疑 GH 操作中可能尚不存在此功能。

我还尝试为每个步骤和/或工作使用条件。例如,我尝试过: if: ${{ success() }} || ${{ failure() }} - 这根本没有提供所需的功能,步骤失败并且下一步没有开始。

if: succeeded() || failed()- 从上面的 Github 社区线程中获取此语法,但它生成了一个语法错误(这是有道理的,因为它与此处指定的语法不兼容)。

总而言之,我正在寻找一种方法来使失败的步骤表明它们失败了,并且仍然使工作流继续进行下一步。

谢谢!

MS *_*nds 20

continue-on-error确实很受欢迎,部分原因可能是您可以为每个步骤或整个作业设置它。I\xe2\x80\x99m 不确定你是否意识到这一点,这个解决方案就是我正在寻找的答案。

\n

更新与此答案的评论相反,您不会得到一个人造(含义:错误)绿色图标 - 他们改变了行为,您将看到失败图标(尽管脚本当然会继续)。

\n

因此,如果其中一个步骤失败,这将继续所有步骤:

\n
Job:\n  MyRun:\n    runs-on: ubuntu-latest\n\n    continue-on-error: true\n    \n    steps:\n      - name: Step One\n        run: curl --fail -o dates.csv https://doesnotexist.com/dates.csv\n      - name: Step Two\n        run: date >> dates.csv\n
Run Code Online (Sandbox Code Playgroud)\n

仅当 \xe2\x80\x9cStep One\xe2\x80\x9d 失败时才会继续,如果 \xe2\x80\x9cStep Two\xe2\x80\x9d 失败,它将中断并停止:

\n
Job:\n  MyRun:\n    runs-on: ubuntu-latest\n    \n    steps:\n      - name: Step One\n        run: curl --fail -o dates.csv https://doesnotexist.com/dates.csv\n        continue-on-error: true\n      - name: Step Two\n        run: date >> dates.csv\n
Run Code Online (Sandbox Code Playgroud)\n

  • 感谢您的详细回答,但我相信“错误时继续:true”仍然将失败的步骤标记为“成功”,并带有人造绿色复选标记。操作员(以及我自己)正在寻找的是在出错时继续执行工作流程,但显示该步骤失败并显示红色 X。另一个答案,[使用always()](https://stackoverflow.com /a/62112985/552792)实现了这一点,但它涉及到在每个后续步骤中放置“if:always()”,因此它并非没有令人头痛的问题。 (19认同)
  • **更新** 似乎他们更新了它,不再有绿色图标。 (2认同)

Noa*_*man 6

只是补充一下这个旧对话:

  1. 行为发生了变化。我的作业标记为continue-on-error: true 确实显示“失败”图标,而不是虚假的“成功”图标。工作流程随后继续进行。

  2. 如果作业通过 转入外部工作流程uses:,则必须进入外部continue-on-error文件中的作业。它无法在主工作流程中继续工作。也就是说,以下给出了语法错误:

jobs:
  my_continue_on_error_job:
    uses: ./.github/workflows/other_workflow.yml
    continue-on-error: true
Run Code Online (Sandbox Code Playgroud)

它失败了:

工作流程无效。.github/workflows/main_workflow.yml(行:201,列:5):意外值“错误时继续”

当我将其移至continue-on-errorother_workflow 中的作业时,它起作用了。


geo*_*k24 5

令我惊讶的是,感谢@smac89 的建议 - 添加if: always()似乎可以解决问题。我仍然想知道为什么if: ${{ success() }} || ${{ failure() }}失败,但该解决方案目前似乎有效。感谢您的帮助!

  • 我认为`如果:${{ success() || failure() }}` 会起作用。仅注意一组大括号。根据我对文档的阅读,“if:always()”在作业取消时以及通过或失败时运行。 (4认同)
  • 关于 @knocte 的评论,您需要在失败步骤之后的每个步骤中添加带有“if”的行。请参阅此答案以获取有效示例:/sf/answers/4120158311/ (2认同)
  • 感谢@hermann-gruber 的澄清,我可能会尝试一下;但这仍然是一个丑陋的解决方案,我希望 GitHub 实现更好的方式来显示警告或其他内容 (2认同)