36

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

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

如此处所述,Github Actions 支持if:条件:

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

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

4

2 回答 2

48

我会的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)。

于 2019-09-12T12:50:47.430 回答
20

在 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()在它们上使用以防止它们在这种情况下运行。

于 2021-08-13T18:47:22.017 回答