将动态 Github 工作流矩阵与输入值和预定义值相结合

Mik*_*ike 8 github github-actions

我有一个工作 GitHub 工作流程,它使用矩阵并构建所有定义的产品。

name: Build

on:
  push:
    tags:
      - "*"
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
       product: [yellow, green, black]
       limits: [10,20,50,100]

    steps:
      - uses: actions/checkout@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    ...
Run Code Online (Sandbox Code Playgroud)

现在希望能够手动触发构建过程并使用输入值仅构建我想要的产品。我可以在 Github 界面上输入值,但看起来使用它们的语法不正确。

构建:.github#L1 评估作业“构建”的“策略”时出错。.github/workflows/build.yml(行:27,列:18):意外值“黄色”,.github/workflows/build.yml(行:28,列:17):意外值“50”

此外,如何将所有预定义产品的先前自动构建与通过一个工作流程内的输入手动完成的产品结合起来?

name: Build

on:
  push:
    tags:
      - "*"
  workflow_dispatch:
    inputs:
      product:
        description: "Product"
        default: "yellow"
      limit:
        description: "Limit"
        default: "50"

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        product: ${{ github.event.inputs.product}}
        limits: ${{ github.event.inputs.limit }}

        # product: [yellow, green, black]
        # limits: [10,20,50,100]

    steps:
      - uses: actions/checkout@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    ...
Run Code Online (Sandbox Code Playgroud)

S. *_* M. 9

矩阵值必须是列表,例如[yellow, green, black]。您输入的名为product 的输入不是列表,而是字符串"yellow"不幸的是,输入数据类型只能是string、choice、boolean 或environment之一。

但是,您可以将字符串转换'["yellow", "green", "black"]'为 json 列表值,并使用 方法将其指定为矩阵值fromJSON(value)fromJSON 文档中的第一个示例显示了在一个作业的输出中将 json 语法列表计算为字符串,并在下一个作业的矩阵策略中使用它。

该示例显示了使用作业中计算的输出。我已经尝试使用工作流程调度输入,如下所示:

on:
  workflow_dispatch:
    inputs:
      products:
        description: "List of Products"
        default: '["yellow"]'
      limits:
        description: "List of limits"
        default: '[50]'

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        product: ${{ fromJSON(github.event.inputs.products)}}
        limits: ${{ fromJSON(github.event.inputs.limits) }}
Run Code Online (Sandbox Code Playgroud)


Jul*_* Ma 0

看来您在输入名称中输入了拼写错误(应该是product而不是edition)?

 strategy:
      matrix:
        edition: ${{ github.event.inputs.product }}
Run Code Online (Sandbox Code Playgroud)