需要(仅)矩阵中的一项特定工作来完成其他相关工作

Ewo*_*ven 6 github-actions

GitHub Actions中,假设我有一个像这样的构建配置,它在 3 个不同的操作系统上构建我的程序并在 Ubuntu 上测试它:

name: build-and-test

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]


  test:
    runs-on: ubuntu-latest
    needs: build
Run Code Online (Sandbox Code Playgroud)

我希望该test作业依赖于该build作业运行的 Ubuntu。然而,现在这取决于这三个人。我如何指定作业test只需要 ubuntu 从build作业中运行即可在开始运行之前完成,而不是全部三个?

TL;DR:我希望testUbuntu 构建作业完成后立即运行该作业,而不是等待 macOS 和 Windows 构建作业。

Akn*_*sis 5

根据 GitHub Actions 的当前实现,这是不可能的。我的建议是将 ubuntu 拉出自己的工作,这样它的执行就独立于其他人。

name: build-and-test

jobs:
  build-slow:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, windows-latest]

  build-ubuntu:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]

  test:
    runs-on: ubuntu-latest
    needs: build-ubuntu
Run Code Online (Sandbox Code Playgroud)

参考:https://github.com/orgs/community/discussions/25364#discussioncomment-4107131 https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs #处理失败