首页 > 解决方案 > GitHub Action 构建矩阵:$ 是如何工作的?

问题描述

文档中:

runs-on: $
strategy:
  matrix:
    node: [6, 8, 10]
    os: [ubuntu-16.04, ubuntu-18.04]
steps:
- uses: actions/setup-node@v1
  with:
    version: $

此片段意味着“setup-node”操作在六种不同的配置中运行(两个不同的操作系统版本上的三个不同的节点版本)。

但是,我不明白 $ 实际是如何工作的。runs-onget 是如何os填充数组中的值的?键如何获取填充的数组version的值?node

自定义操作如何与构建矩阵选项一起使用?

标签: github-actions

解决方案


$运算符尚未记录,但在示例中您可以看到它的用法。如果你熟悉的话,它似乎类似于MongoDB 的$operator 。在 MongoDB 中,显然在这里,$代表“列表中当前元素的值”。例如,文档片段将创建六个作业,三个在 Ubuntu 16.04 上运行,三个在 Ubuntu 18.04 上运行。

该文档并不完整,并且$您引用的文档片段中使用运算符的方式将来会改变。片段应该是:

runs-on: ${{ matrix.os }}
strategy:
  matrix:
    node: [6, 8, 10]
    os: [ubuntu-16.04, ubuntu-18.04]
steps:
- uses: actions/setup-node@v1
  with:
    version: ${{ matrix.node }}

尽管 GitHub Actions 解析器很容易确定应该将哪个字符串列表分配给runs-on参数(因为 6、8 和 10 不是 的有效值runs-on),但它无法知道有效值是什么的version输入setup-node。(顺便说一句,从 2019 年 8 月 14 日起已重命名为node-version,但文档片段尚未更新)。配置文件中没有action.yml列出输入的有效值,只有名称和描述。

所以由于这个文档片段不能按原样工作,我猜它会在某个时候更新,说这$是当前选定的矩阵变量集,并且${{ variableName }}(例如,${{ matrix.node }}${{ matrix.os }})是你应该放入的使用这些变量的作业配置部分。

至于您问题的第二部分,“自定义操作如何与构建矩阵选项一起使用?”,我认为它看起来像一个正常操作,将其输入记录在action.yml(请参阅for action.ymlsetup-node v1 for setup-node v1 for这看起来像的一个例子)。然后,当您在工作中调用它时,您会这样做:

strategy:
  matrix:
    someVariable: [foo, bar]
steps:
- uses: my-actions/quux@v1.0
    with:
      someInput: ${{ matrix.someVariable }}

推荐阅读