我可以有多个 GitHub Actions 工作流文件吗?

Posted

技术标签:

【中文标题】我可以有多个 GitHub Actions 工作流文件吗?【英文标题】:Can I have multiple GitHub Actions workflow files? 【发布时间】:2019-11-28 15:06:00 【问题描述】:

我可以有多个工作流文件吗?

我有一些使用 GitHub Actions 的 repo,它们工作得很好!在我的特定用例中,我在“推送”时自动部署到我的开发环境,并在“发布”时自动部署到生产环境。这是两个独立的工作流程。

我知道我可以将这两个工作流放在同一个 main.workflow 文件中,这样可以正常工作,但我更愿意将它们完全放在单独的工作流文件中。例如,是否有可能拥有一个 dev.workflow 文件和一个 prod.workflow 文件?

我已尝试创建 dev.workflow 和 prod.workflow 文件,但它们似乎没有被 Actions 接收。似乎需要一个 main.workflow 文件。如果是这种情况,有没有办法将其他工作流文件导入 main.workflow?

【问题讨论】:

您的文件是用 yml 编写的吗? 【参考方案1】:

.github/workflows 文件夹中可以有多个文件。所有文件都将作为独立测试读取和运行。每个文件的 'on' 参数将告诉它何时必须被调用。

按照您的想法,您可以:

dev.workflow.yml - 运行某种测试可能(仅在 dev 分支上,推送时)

name: Dev Workflow - Test and check thing
on:
  push:
    branches:
      - dev
jobs:
  ...

prod.workflow.yml- 构建和部署您的项目(仅在 master 分支上,当 PR 关闭时)

name: Master Workflow - Build and deploy to production
on:
  pull_request:
    types: closed
    branches:
      - master
jobs:
  ...

【讨论】:

@ItsKarma 我更新了答案,以便为任何找到好的解释的人更好地解释。 :) 我们如何知道哪个 yml 文件首先运行? 如果条件相同,它们将并行运行,但不保证顺序。【参考方案2】:

自从提出这个问题以来,GitHub 对工作流程进行了一些更改。它们现在是用 YAML 语法而不是 HCL 编写的,并且它们不是存储在 .github/main.workflow 文件中,而是存储在 .github/workflows 目录中。 documentation 表示“您必须将工作流文件”(注意复数形式)“存储在存储库的 .github/workflows 目录中。”

因此,一旦您将 main.workflow 文件移植到 YAML 语法,您应该能够以您想要的方式将每个工作流存储在一个文件中。

【讨论】:

【参考方案3】:

是的,您可以在工作流目录下拥有多个 yml 文件,也可以让它们都具有相同的条件,以便它们可以并行运行。但是,不建议这样做。 至于来自 [https://github.community/t/execution-order-for-multiple-workflows-in-one-repo/116780] 的答案

每个工作流都需要在yaml文件中定义一个事件触发器,如果​​你的操作触发了事件,工作流就会启动,它们可以并行。

【讨论】:

以上是关于我可以有多个 GitHub Actions 工作流文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

Github Actions Build - 在多个文件夹上推送到 ECR

在 GitHub Actions 工作流程中未使用语义发布-monorepo 找到存储库

如何使用 Github Actions 运行特定作业

在 GitHub Actions 工作流程中缓存 APT 包

在另一个工作流成功运行后手动触发 Github Actions 工作流

Github Actions 自动合并未按预期工作