我正在为我的 CI 创建一个 GitHub Actions 工作流程,我意识到我在重复一些信息。例如,runs-on作业的 定义为ubuntu-18.04and mac-10.14,或strategy/matrix.
我想将这些版本信息集中在 YAML 文件中的某个位置,并且能够引用这些信息而不是多次复制该值。这样我就不会重复自己 (DRY) 并且我可以轻松地在一个位置更改版本值并防止不一致。
不幸的是,我这样做有困难。我虽然可以用于此的方式是env在 YAML 顶部使用全局环境变量并在其他地方引用它。例如,我想替换如下内容:
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
[...]
Run Code Online (Sandbox Code Playgroud)
和:
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 }}
[...]
Run Code Online (Sandbox Code Playgroud)
即在表达式中使用env 上下文(请参阅GitHub 操作 - 上下文的上下文和表达式语法)。
这失败了:
### 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
Run Code Online (Sandbox Code Playgroud)
我只能在上下文和这个页面上找到这个问题,说现在在工作流级别上工作。envenv
如何集中重复字符串/版本/等。至于 DRY 到一个位置?
谢谢!
您可以使用 来在工作流程级别执行此操作env,只是不能在 中使用这些值runs-on- 这就是为什么您只收到错误UBUNTU_VERSION和 错误的原因TOOLCHAIN_VERSION。
为什么?因为env是在机器上设置的环境变量,但它需要先配置机器,然后才能在机器上设置环境变量,但它不知道要配置哪台机器,因为机器类型中有一个环境变量。 .:)
我确信 GitHub 可以解决这个问题,但现在不起作用。
旁注:作业被设计为独立、并行和在不同的机器上运行。如果您有顺序工作流程,最好有一个作业和多个步骤。这也将消除您的重复ubuntu-18.04定义并缩小您的工作流程文件。
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |