Skip to main content

避免重复

可以使用可重用工作流或复合操作来避免工作流内容的重复。

关于可重用工作流和复合操作

可重用工作流和复合操作是避免工作流内容重复的两种方式。

可重用工作流允许你重用整个工作流,包括其所有作业和步骤。 当你拥有要在多个存储库中使用的完整 CI/CD 过程时,此方式特别有用。 可以在一个位置集中维护可重用工作流,但可在整个组织的许多存储库中使用可重用工作流。

复合操作允许将多个步骤合并到单个操作中。 然后,可以在工作流中将此组步骤作为单个步骤运行。 如果你拥有一系列将在多个工作流中使用的步骤,此方式特别有用。 复合操作允许将较长的 YAML 工作流文件重构为较小的文件,并避免在工作流文件之间执行复制和粘贴操作。

可重用工作流和复合操作解决的问题是相似的,但两者之间存在一些重要差异。 大多数时候,使用哪种解决方案都是可以的。 但有些时候,你必须使用其中一种解决方案或另一种解决方案,如本文后面部分所述。

有关如何创建和使用可重用工作流和复合操作的详细信息,请参阅“重新使用工作流”和“创建组合操作”。

可重用工作流和复合操作的比较

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

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

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