【问题标题】:How to fail a job in Github Actions?如何在 Github Actions 中失败?
【发布时间】:2020-01-14 03:52:51
【问题描述】:

我正在开发一个 Github 操作工作流程。此工作流在 Linux、Mac 和 Windows 上运行。

作为工作流程的一部分,我必须检查 2 个环境变量是否相等。如果他们不这样做 - 工作失败。

here 所述,Github Actions 支持if: 条件:

steps:
- run: # How can I make a cross-platform failure here?
  if: ${{ envA }} != ${{ envB }}

如果上述条件为真,我怎样才能使作业失败? 一开始,我想到了一个脚本,但一定有一个更优雅的方法来失败。

【问题讨论】:

    标签: github github-actions


    【解决方案1】:

    我会做run: exit 1。在所有三个平台上,这将简单地以退出代码 1 退出。

    证明它是跨平台的:https://github.com/rmunn/Testing/runs/220188838,它运行以下工作流程:

    name: Test exiting on failure
    
    on: [push]
    
    jobs:
      build:
    
        strategy:
          matrix:
            os: [ubuntu-latest, windows-latest, macOS-latest]
        runs-on: ${{ matrix.os }}
        
        steps:
        - uses: actions/checkout@v1
        - name: Try to fail
          run: exit 1
        - name: Print message if we don't fail
          run: echo Should not get here
    

    (此答案的早期版本建议使用“/bin/false”,但这仅适用于 Linux 和 macOS)。

    【讨论】:

    • 有什么方法可以做到这一点而不会导致工作失败?即退出给定条件但成功的工作?
    • 对于任何想知道的人,“exit 0”将提前结束该步骤而不会取消作业。
    • 我确实使用了exit 0,但它不起作用。以下步骤仍将运行。
    【解决方案2】:

    2021 年,或许有更优雅的方式来做到这一点:

    - name: A/B Check
      if: ${{ envA }} != ${{ envB }}
      uses: actions/github-script@v3
      with:
        script: |
            core.setFailed('envA and envB are not equivalent!')
    

    在这里,我们使用github-script 操作来提供一个单行脚本,该脚本会使作业失败。 “A/B 检查”步骤只会在if 行中的条件为真时运行,因此脚本只会在这种情况下运行,这正是我们想要的。

    这种方法的好处是,您将在您的存储库的 Actions UI 中获得格式良好的输出,显示“A/B 检查”步骤导致失败,以及原因(即“envA 和 envB 不等价” ")。

    请注意,如果您在此之后的作业中有其他步骤,并且您不希望它们在 A/B 检查失败时运行,您需要在它们上使用if: success() 以防止它们在其中运行案例。

    【讨论】:

    • 我真的很喜欢这个!但实际上我不得不将 if 条件更改为 if: ${{ envA != envB }}
    • 直到现在我才知道这个动作。谢谢!!! ❤️
    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 2020-01-14
    • 2021-08-18
    • 2020-06-14
    • 1970-01-01
    • 2022-06-12
    • 2021-05-02
    • 2021-04-23
    相关资源
    最近更新 更多