github-actions - 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-on
get 是如何os
填充数组中的值的?键如何获取填充的数组version
的值?node
自定义操作如何与构建矩阵选项一起使用?
解决方案
该$
运算符尚未记录,但在示例中您可以看到它的用法。如果你熟悉的话,它似乎类似于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.yml
setup-node v1 for setup-node v1 for这看起来像的一个例子)。然后,当您在工作中调用它时,您会这样做:
strategy:
matrix:
someVariable: [foo, bar]
steps:
- uses: my-actions/quux@v1.0
with:
someInput: ${{ matrix.someVariable }}
推荐阅读
- c++ - C++ 使用可变参数存储回调
- reactjs - 异步列出表中来自另一个对象的值
- javascript - 按 id 从数组中删除对象
- ios - PHAsset 到 UIImage,
- android - 每个颤振编译控制台输出重复上一个控制台输出
- c# - 读取和写入 csv 文件并删除逗号
- python - 使用 xpath 或 css 选择器在 div 中找不到元素
- package - 无法删除 MSVS 2019 中解决方案的已安装 Nuget 包
- node.js - Homebrew 安装 Node 和 NPM 时出现问题
- javascript - 我想从字符串中删除特殊字符,但我需要 javascript 中的字符串中的点