如何在 Github 操作中使工作失败?

How to fail a job in Github Actions?

我正在开发 Github 动作工作流程。此工作流在 Linux、Mac 和 Windows.

上运行

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

如所述here,Github 动作支持if: 条件:

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

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

我愿意 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)。

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 操作来提供一个会使作业失败的单行脚本。如果 if 行中的条件为真,“A/B 检查”步骤将仅 运行,因此在这种情况下脚本将仅 运行,这正是我们想要的.

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

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