我可以有多个 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 工作流程中缓存 APT 包