如何从主 github 操作 yaml 文件引用另一个 yml 文件?

2024-04-08

我正在定义一个引用另一个 yaml 文件的 github 操作脚本,希望能够以更有条理的方式进行配置。

这是我的工作文件,名为deploy.yml在路径中./.github/workflows/,其中第一个.是我的项目的根文件夹。

....
jobs:
  UnitTest:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/workflows/unittest.yml

在相同的./.github/workflows/文件夹中,我创建了另一个文件,名为unittest.yml如下:

name: "UnitTest"
description: "Perform Unit Test"
runs:
  # using: "composite"
  - name: Dependency
    run: |
      echo "Dependency setup commands go here"

  - name: UnitTest
    run: make test.unit

但是,当我尝试使用本地测试脚本时act https://github.com/nektos/act用命令act --secret-file .secrets --container-architecture linux/amd64,我收到以下错误:

[Deploy/UnitTest]   ✅  Success - Main actions/checkout@v3
[Deploy/UnitTest] ⭐ Run Main ./.github/workflows/unittest.yml
[Deploy/UnitTest]   ❌  Failure - Main ./.github/workflows/unittest.yml
[Deploy/UnitTest] file does not exist
[Deploy/UnitTest] ????  Job failed

我尝试只输入文件名unittest.yml or ./unittest.yml or myrepo_name/.github/workflows/unittest.yml或将文件放入子文件夹中,例如本文档的步骤 2 https://docs.github.com/en/actions/using-workflows/reusing-workflows#using-inputs-and-secrets-in-a-reusable-workflow如图所示,但一切都没有运气。

基于以下示例运行组合动作 https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#runsstepsuses,我想这应该可行。

有人请建议吗?

附:您可能已经注意到注释行using: "composite" in the unittest.yml。如果我取消注释该行,我将收到错误:

Error: yaml: line 3: did not find expected key

复合操作不是由 YAML 文件引用,而是由文件夹引用。在该文件夹中,您应该有一个描述该操作的 action.yml。

这就是为什么你会收到错误using: composite,您正在定义一个工作流程(因为它位于./github/workflows),但您正在使用操作语法。

我建议这个文件夹结构:

.github/
 |-- workflows/
    | -- deploy.yml
unittest-action/
 |-- action.yml

通过这种结构,您应该能够引用该操作

- uses: actions/checkout@v3
- uses: ./unittest-action

请参阅docs https://docs.github.com/en/actions/creating-actions/creating-a-composite-action了解更多信息。


根据您的用例和设置,您可能还需要考虑可重用的工作流程 https://docs.github.com/en/actions/using-workflows/reusing-workflows.

您可以在您的应用程序中定义可重用的工作流程.github/workflows目录如下:

# unittest.yml
on: workflow_call

jobs:
  deploy:
    # ...

然后这样称呼它:

jobs:
  UnitTest:
    uses: ./.github/workflows/unittest.yml

请注意可重用工作流程如何成为一个完整的作业。这意味着,您无法从外部进行结帐,然后仅在可重用作业中运行单元测试。可重用作业(unittest.yml)需要首先进行签出。


该选哪一个呢?

这是一个博客文章 https://dev.to/n3wt0n/composite-actions-vs-reusable-workflows-what-is-the-difference-github-actions-11kd#:%7E:text=With%20Reusable%20workflows%20you%20have,if%20it%20contains%20multiple%20steps.总结复合操作和可重用工作流程之间的一些差异,例如:

  • 可重用的工作流程可以包含多个作业,复合操作仅包含步骤
  • 可重用的工作流程可以更好地支持使用机密
  • 复合操作可以嵌套,但从 22 年 7 月开始,可重用工作流程无法调用其他可重用工作流程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从主 github 操作 yaml 文件引用另一个 yml 文件? 的相关文章

随机推荐