【发布时间】:2020-03-17 18:29:22
【问题描述】:
我正在为我的 CI 创建一个 GitHub Actions 工作流,我意识到我在重复一些信息。例如,作业的runs-on 定义为ubuntu-18.04 和mac-10.14,或strategy/matrix 中的特定编译器/工具链版本。
我想将这些版本信息集中在 YAML 文件中的某个位置,并且能够引用这些信息,而不是多次重复该值。这样我就不会重复自己 (DRY),而且我可以轻松地在一个位置更改版本值并防止不一致。
很遗憾,我在这样做时遇到了麻烦。我可以使用的方法是在 YAML 顶部使用全局 env 环境变量并在其他地方引用它。例如,我想替换如下内容:
on: [push, pull_request]
name: CI
jobs:
build:
name: Build
runs-on: ubuntu-18.04
strategy:
matrix:
toolchain:
- 1.2.3
steps:
- run: ./build.sh 1.2.3
package:
name: Package
runs-on: ubuntu-18.04
steps:
- run: ./package.sh 1.2.3
[...]
与:
on: [push, pull_request]
name: CI
env:
UBUNTU_VERSION: 18.04
TOOLCHAIN_VERSION: 1.2.3
jobs:
build:
name: Build
runs-on: ubuntu-${{ env.UBUNTU_VERSION }}
strategy:
matrix:
toolchain:
- ${{ env.TOOLCHAIN_VERSION }}
steps:
- run: ./build.sh ${{ matrix.toolchain }}
package:
name: Package
runs-on: ubuntu-${{ env.UBUNTU_VERSION }}
steps:
- run: ./package.sh ${{ env.TOOLCHAIN_VERSION }}
[...]
即在表达式中使用env 上下文(参见Contexts and expression syntax for GitHub Actions - Contexts)。
这失败了:
### ERRORED 18:08:15Z
- Your workflow file was invalid: The pipeline is not valid. .github/workflows/ci.yml (Line: 20, Col: 14): Unrecognized named-value: 'env'. Located at position 1 within expression: env.UBUNTU_VERSION,.github/workflows/ci.yml (Line: 125, Col: 14): Unrecognized named-value: 'env'. Located at position 1 within expression: env.UBUNTU_VERSION
我只能在 env 上下文中找到 this question 和 this page 说 env 现在在工作流级别上工作。
如何集中重复的字符串/版本/等。到 DRY 的单一位置?
谢谢!
【问题讨论】:
-
听起来你想要的是一个 YAML 锚。不幸的是,它们在 GitHub Actions 中不受支持。仔细检查一下,我刚刚尝试并收到了
Anchors are not currently supported.错误。 -
GitHub Actions 论坛上有一个关于 YAML 锚支持的帖子:github.community/t5/GitHub-Actions/Support-for-YAML-anchors/m-p/… 似乎他们正在努力添加它们,但我不知道发布的时间框架可能是什么。我会关注该线程以了解有关它的任何消息。
标签: github-actions