如何在 Github 工作流程中的多个作业中重用策略矩阵

Den*_*aud 5 continuous-integration github-actions

我想避免在不同的工作中重复策略矩阵:

\n
jobs:\n  build-sdk:\n\n    runs-on: macOS-latest\n    strategy:\n      fail-fast: false\n      matrix:\n        qt-version: ['5.15.1']\n        ios-deployment-architecture: ['arm64', 'x86_64']\n        ios-deployment-target: '12.0'\n\n\n    steps:\n      \xe2\x80\xa6\n\n  create-release:\n    needs: build-sdk\n    runs-on: macOS-latest\n    steps:\n      \xe2\x80\xa6\n\n\n  publish-sdk:\n    needs: [build-sdk, create-release]\n    runs-on: macOS-latest\n    strategy:\n      fail-fast: false\n       matrix: ?????\n\n    steps:\n      \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

这可能吗(无需创建作业来将矩阵创建为 JSON 本身)?

\n

jid*_*ula 1

有一个操作允许将多个资产从矩阵构建上传到同一版本,该矩阵构建在推送到标签时触发。有人提出了有关此特定用例的问题,该操作的作者回复为

上传与同一标签关联的 GitHub 版本的资产,因此只要在针对同一标签运行的工作流程中运行此操作,所有资产都应添加到同一 GitHub 版本。

这表明像这样的工作流程可能会满足您的需求:

on:
  push:
    tags:
      - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10

jobs:
  release:

    runs-on: macOS-latest
    strategy:
      fail-fast: false
      matrix:
        qt-version: ['5.15.1']
        ios-deployment-architecture: ['arm64', 'x86_64']
        ios-deployment-target: '12.0'


    steps:
      - name: build SDK
        run: ...
      - name: Create Release
        uses: softprops/action-gh-release@v1
        with:
          files: |
            - "SDK_file1" # created in previous build step
            - "SDK_file2"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GITHUB_REPOSITORY: username/reponame
      - name: publish SDK
        run: ...
Run Code Online (Sandbox Code Playgroud)

我已经简化了您需要执行的操作,但我猜测您可能想要上传名称反映其适用矩阵选项的资产。对于该细节,我建议在您的作业中添加一个显式步骤来创建资产的文件名并将其添加到作业环境中,这与我在这里所做的有点类似:

      - name: Name asset
        run: |
          BINARY_NAME=sdk-qt${{matrix.qt-version}}-iOS${{matrix.ios-deployment-target}}-${{matrix.ios-deployment-architecture}}
          echo "BINARY_NAME=$BINARY_NAME" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)

然后,当您的构建步骤生成资产时,您可以使用 中的文件名命名它们${{env.BINARY_NAME}},并将相同的名称传递给发布创建步骤,就像我在此处的资产发布步骤中所做的那样。