关于可复用的工作流和复合操作
可复用的工作流和复合操作是避免重复工作流内容的两种方法。
可重用工作流允许您重用整个工作流,包括其所有作业和步骤。当您拥有一个想要跨多个存储库使用的完整 CI/CD 流程时,这尤其有用。可重用工作流可以在一个位置集中维护,但在您组织中的许多存储库中使用。
复合操作允许您将多个步骤组合到单个操作中。然后,您可以在工作流中将此步骤捆绑作为单个步骤运行。如果您有一系列将在多个工作流中使用的步骤,则此功能很有用。复合操作允许您将冗长的 YAML 工作流文件重构为更小的文件,并避免在工作流文件之间复制粘贴。
可重用工作流和复合操作解决了类似的问题,但有一些重要的区别。大多数时候,您可以使用任一解决方案。但在某些情况下,您需要使用其中一个,如下文所述。
有关如何创建和使用可重用工作流和复合操作的详细信息,请参阅“重用工作流”和“创建复合操作”。
可重用工作流和复合操作的比较
- 工作流作业 - 复合操作包含一系列步骤,这些步骤在调用工作流中作为单个步骤运行。与可重用工作流不同,它们不能包含作业。
- 日志记录 - 当复合操作运行时,日志将仅显示在调用工作流中运行复合操作的步骤,而不是复合操作中的各个步骤。对于可重用工作流,每个作业和步骤都会单独记录。
- 指定运行器 - 可重用工作流包含一个或多个作业。与所有工作流作业一样,可重用工作流中的作业指定作业将在其上运行的机器类型。因此,如果步骤必须在可能与为调用工作流作业选择的机器不同的机器类型上运行,则应使用可重用工作流,而不是复合操作。
- 将输出传递给步骤 - 复合操作在工作流作业中作为步骤运行,并且您可以在运行复合操作的步骤之前或之后添加多个步骤。可重用工作流直接在作业中调用,而不是从作业步骤中调用。您不能在调用可重用工作流后向作业添加步骤,因此您不能使用
GITHUB_ENV
将值传递给调用工作流中的后续作业步骤。
可重用工作流和复合操作之间的主要区别
可重用工作流 | 复合操作 |
---|---|
一个 YAML 文件,与任何标准工作流文件非常相似 | 包含一组工作流步骤的操作 |
每个可重用工作流都是存储库的.github/workflows 目录中的单个文件 | 每个复合操作都是一个单独的存储库或目录,包含一个action.yml 文件,以及可选的其他文件 |
通过引用特定的 YAML 文件来调用 | 通过引用定义操作的存储库或目录来调用 |
直接在作业中调用,而不是从步骤中调用 | 在作业中作为步骤运行 |
可以包含多个作业 | 不包含作业 |
每个步骤都实时记录 | 即使包含多个步骤,也记录为一个步骤 |
最多可以连接四层工作流 | 可以嵌套,在一个工作流中最多包含 10 个复合操作 |
可以使用密钥 | 不能使用密钥 |