如何从主 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 文件? 的相关文章

  • 使用 github 操作缓存 npm 依赖项

    我想缓存 npm 依赖项 这样我就不会每次推送时都执行 npm install 而是从缓存加载它 我认为 github action 现在支持这个了吗 如何缓存 GitHub 操作中的步骤 https stackoverflow com q
  • 拉取部署、github 操作和 ssh 密钥

    比方说 我想使用 GitHub 操作和拉取策略来设置部署流程 所以我有一个 Ubuntu 服务器 我复制服务器的公共 ssh 密钥 将其添加到我的 GitHub 帐户 然后我可以从 Ubuntu 服务器克隆 构建并运行应用程序 那太好了 但
  • ruby yaml ypath 和 xpath 一样吗?

    你好 我有一个像这样的 yaml 文件 data date 2004 06 11 description First description date 2008 01 12 description Another descripion 我如
  • Web 配置转换不适用于 Visual Studio Online、VS2013 和 Azure

    我有一个 MVC5 网站 使用 Visual Studio Online TFS 的持续集成成功地将暂存和生产版本部署到 Azure 我已经关注了这篇博文 使用自定义部署脚本通过 git 持续交付到 Azure 网站 http chrisk
  • Hudson 与 UCM ClearCase 集成

    我有一台安装了 JBoss UCM ClearCase 和 ant 的 Linux 构建机器 我想了解如何使用 Hudson 和 Hudson Clearcase 插件配置持续集成 我可以使用已创建的现有动态视图吗 请给我一些基本步骤 先感
  • MSTest 命令行设置

    我们需要能够将服务器地址传递到 MSTest 命令行中 以便由 TeamCity 持续集成 CI 软件调用我们的测试套件 之前我们在 C 单元测试中创建了 if 常量 这在 MSBuild 中进行了更改 有没有更好的办法 这种方式看起来很h
  • 如何在 gitlab-ci 作业之间传递变量?

    我有一个像这样的 gitlab ci stages calculation execution calculation job stage calculation script calculate something and output
  • 用正则表达式重写YAML frontmatter

    我想使用 Jekyll 将我的 WordPress 网站转换为 GitHub 上的静态网站 我使用了一个插件 将我的 62 篇帖子以 Markdown 形式导出到 GitHub 我现在在每个文件的开头都有这些带有额外 frontmatter
  • Github - 自动将问题分配给项目

    我想将问题自动分配给 Github 中的项目 基本上自动为每个自动打开的问题自动生成以下屏幕截图 有任何想法吗 有两个本机支持的选项 有一个官方操作可以添加问题并拉取请求projects https docs github com en i
  • Spring Boot 2:如何将不同模块的每个 application.yml 文件加载到给定的 Web 或批处理运行器中

    我创建了一个 Spring Boot 应用程序 我想知道是否可以加载不同模块的 upmteens application yml 文件 我有这样的结构 myProject moduleCommons application yml modu
  • 复合运行步骤 GitHub Actions 错误:“在 URI 处找不到操作”

    我正在尝试在 GitHub Actions 上使用复合运行步骤操作 如上所述here https github blog changelog 2020 08 07 github actions composite run steps 7E
  • 如何调试(最好在 IDE 中)MSBuild 脚本?

    我们非常广泛地使用 MSBuild 作为我们持续集成过程的一部分 虽然它非常强大 我们几乎可以在其中完成所有构建 测试和部署 利用一些自定义任务 我们发现使用标签对其进行调试是一种痛苦 并且不能总是为我们提供足够的信息 我发现 http w
  • 使用 Github 注册表中的 Docker 镜像未经授权

    我在本地创建了 Docker 镜像 将其标记为 Github Docker 注册表 将其推送到 Github Docker 注册表 现在我想在 Github 操作中使用它来创建 Docker 镜像FROM字段但它总是失败unauthoriz
  • 使用对象键作为 JSON 架构中的类型

    假设我想根据 Intellij IDEA 中的 JSON 架构验证 YAML 文件 该文件的结构如下 foo command touch tmp a txt I know I don t need this but it s an exam
  • 从 Jenkinsfile 中获取有关其他分支的信息

    Jenkins Blue Ocean 与链接的 Bitbucket Server 实例在同一本地网络上运行 Jenkins 中的多分支项目能够为本地 Bitbucket 服务器上链接的 Bitbucket 存储库的每个分支创建一个分支 但在
  • Azure DevOps 中的条件构建解决方案

    I am working on a large scale application which uses multiple small small project solutions Each solution is built in th
  • 如何在 AWS Amplify 上运行 React/Redux 应用程序的代理

    我最近实施了Proxy 在 Express js 中 对于我的反应应用程序发出请求时隐藏 API URL 当我在本地主机上运行代理和应用程序时 它工作得非常好 现在我已准备好将我的应用程序部署到AWS 放大 我对如何让我的代理在那里运行有点
  • Docker:通过 CLI 使用 --password 是不安全的。使用--密码-stdin

    当我在持续集成 CI 过程中登录注册表时 出现以下警告 WARNING Using password via the CLI is insecure Use password stdin 我应该更换吗 password with passw
  • 从 azure pipeline.yml 将变量组参数传递到模板时出现问题

    我已经声明了一个变量组Agile Connections 如下所示 该组对任何管道没有任何限制 我正在使用另一个名为 vars yml 的模板来存储一些其他变量 variables group Agile Connections name
  • Scala 的代码覆盖率工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐