Skip to main content

可重用工作流

了解如何通过重用现有工作流程来避免在创建工作流程时重复。

关于可重用工作流程

您可以使工作流程可重复使用,而不是从一个工作流程复制并粘贴到另一个工作流程。 然后,您和有权访问可重用工作流程的任何人都可以从另一个工作流程调用可重用工作流程。

重用工作流程可避免重复。 这使得工作流程更易于维护,并允许您通过构建他人的工作来更快地创建新工作流程,就像您对操作所做的那样。 工作流重用还通过帮助你使用设计良好、已经过测试且已证明有效的工作流来促进最佳做法。 您的组织可以构建可集中维护的可重用工作流程库。

下图显示了使用可重用工作流的正在进行的工作流运行。

  • 在该图左侧的三个生成作业均成功完成后,将运行一个名为“部署”的依赖作业。
  • “部署”作业调用包含三个作业的可重用工作流:“暂存”、“审阅”和“生产”。
  • “生产”部署作业仅在“暂存”作业成功完成后运行。
  • 当作业以环境为目标时,工作流运行会显示一个进度条,其中显示作业中的步骤数。 在下图中,“生产”作业包含 8 个步骤,目前正在处理步骤 6。
  • 使用可重用工作流程运行部署作业,可以为每个构建运行这些作业,而无需在工作流程中重复代码。

调用可重用工作流的工作流示意图。

使用其他工作流程的工作流程称为“调用方”工作流程。 可重用工作流程是“被调用”工作流程。 一个调用方工作流程可以使用多个被调用的工作流程。 每个被调用的工作流程都在一行中引用。 结果是,调用方工作流程文件可能只包含几行 YAML,但在运行时可能会执行大量任务。 当您重用工作流程时,将使用整个被调用的工作流程,就像它是调用方工作流程的一部分一样。

如果重用其他存储库中的工作流程,则被调用工作流程中的任何操作都将像调用方工作流程的一部分一样运行。 例如,如果被调用的工作流使用 actions/checkout,则该操作将签出托管调用方工作流(而不是被调用的工作流)的存储库的内容。

您可以将 GitHub Actions 工作流程中引用的重用工作流程视为包含工作流程的仓库依赖图中的依赖项。 有关详细信息,请参阅“关于依赖项关系图”。

可重用工作流与复合操作

可重用工作流和复合操作均有助于避免工作流内容的重复。 可重用工作流允许你重用包含多个作业和步骤的整个工作流,而复合操作则合并了多个步骤,然后你可以在作业步骤中运行这些步骤,就像执行任何其他操作一样。

现在就某些方面对各解决方案进行比较:

  • 工作流作业**** - 复合操作包含一系列步骤,这些步骤在调用方工作流中作为单个步骤运行。 与可重用工作流不同,复合操作不能包含作业。
  • 日志记录 - 当复合操作运行时,日志将仅显示运行复合操作的调用方工作流中的步骤,而不是复合操作中的单个步骤。 使用可重用工作流时,将单独记录每个作业和步骤。
  • 指定运行器 - 可重用工作流包含一个或多个作业。 与所有工作流作业一样,可重用工作流中的作业指定运行作业的计算机的类型。 因此,如果步骤必须在为调用工作流作业选择的计算机类型上运行,则应使用可重用工作流,而不是复合操作。
  • 将输出传递给步骤 - 复合操作在工作流作业中作为单个步骤运行,并且你可以在运行复合操作的步骤之前或之后执行多个步骤。 可重用工作流直接在作业中调用,而不是从作业步骤中调用。 在调用可重用工作流后,无法向作业添加步骤,因此不能使用 GITHUB_ENV 将值传递到调用方工作流中的后续作业步骤。

可重用工作流与复合操作之间的主要区别

可重用工作流复合操作
YAML 文件,与任何标准工作流文件非常相似包含一组工作流步骤的操作
每个可重用工作流都是存储库的 .github/workflows 目录中的单个文件每个复合操作都是单独的存储库或目录,包含 action.yml 文件及其他文件(可选)
通过引用特定的 YAML 文件进行调用通过引用在其中定义操作的存储库或目录进行调用
直接在作业中调用,而不是从步骤调用作为作业中的步骤运行
可以包含多个作业不包含作业
实时记录每个步骤记录为一个步骤,即使包含多个步骤
最多可以连接到四个级别的工作流一个工作流中最多可嵌套 10 项复合操作
可以使用机密无法使用机密

可重用工作流和工作流模板

组织中所有有权创建工作流的人员可利用工作流模板,更快、更轻松地创建工作流。 当用户创建新的工作流时,可以选择一个工作流模板,并且将为其完成编写工作流的部分或全部工作。 在工作流模板中,还可以引用可重用的工作流,以便用户能够轻松地从重用集中管理的工作流代码中受益。

如果在引用可重用工作流时使用提交 SHA,则可以确保重用该工作流的每个人都将始终使用相同的 YAML 代码。 但是,如果通过标记或分支引用可重用工作流程,请确保您可以信任该版本的工作流程。 有关详细信息,请参阅“安全使用参考”。

GitHub 为各种语言和工具提供工作流模板。 在仓库中设置工作流程时,GitHub 会分析仓库中的代码,并根据仓库中的语言和框架推荐工作流程。 例如,如果使用 Node.js,则 GitHub 将建议使用工作流模板文件来安装 Node.js 包并运行测试。 可以搜索和筛选以查找相关的工作流模板。

GitHub 为以下高级类别提供现成的工作流模板:

  • 部署 (CD) 。 有关详细信息,请参阅“连续部署”。
  • 持续集成 (CI) 。 有关详细信息,请参阅“Continuous integration”。
  • 自动化. 自动化工作流模板提供了自动化工作流的解决方案,例如,对拉取请求分类并根据拉取请求中修改的路径对拉取请求应用标签,或问候首次参与存储库的用户。

使用这些工作流作为构建自定义工作流的起点或按原样使用它们。 可以在 actions/starter-workflows 存储库中浏览工作流模板的完整列表。

有关详细信息,请参阅“为组织创建工作流模板”。

后续步骤

若要开始重用工作流,请参阅 重用工作流

如需了解有关工作流重用细节的信息,请参阅 可重用工作流程参考