# 重用工作流配置

了解如何在创建工作流时避免重复。

## 可重用工作流

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

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

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

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

![调用可重用工作流的工作流示意图。](/assets/images/help/actions/reusable-workflows-ci-cd.png)

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

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

你可以在包含你的工作流的仓库的依赖关系图中，将你的 GitHub Actions 工作流引用的可重用工作流作为依赖项查看。 有关详细信息，请参阅“[关于依赖项关系图](/zh/enterprise-server@3.22/code-security/concepts/supply-chain-security/dependency-graph)”。

### 可重用工作流与复合操作

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

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

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

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

| 可重用工作流                                                    | 复合操作                                                     |
| --------------------------------------------------------- | -------------------------------------------------------- |
| YAML 文件，与任何标准工作流文件非常相似                                    | 包含一组工作流步骤的操作                                             |
| 每个可重用工作流都是存储库的 `.github/workflows` 目录中的单个文件               | 每个复合操作都是单独的存储库或目录，包含 `action.yml` 文件及其他文件（可选）            |
| 通过引用特定的 YAML 文件进行调用                                       | 通过引用在其中定义操作的存储库或目录进行调用                                   |
| 直接在作业中调用，而不是从步骤调用                                         | 作为作业中的步骤运行                                               |
| 可以包含多个作业                                                  | 不包含作业                                                    |
| 实时记录每个步骤                                                  | 记录为一个步骤，即使包含多个步骤                                         |
| 最多可连接 四 级工作流                                              | 一个工作流中最多可嵌套 10 项复合操作                                     |
| 可以使用机密                                                    | 无法使用机密                                                   |
| 无法发布到 [市场平台](https://github.com/marketplace?type=actions) | 可发布到 [应用市场](https://github.com/marketplace?type=actions) |

## 工作流模板

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

如果在引用可重用工作流时使用提交 SHA，则可以确保重用该工作流的每个人都将始终使用相同的 YAML 代码。 但是，如果通过标记或分支引用可重用工作流程，请确保您可以信任该版本的工作流程。 有关详细信息，请参阅“[安全使用指南](/zh/enterprise-server@3.22/actions/reference/security/secure-use#reusing-third-party-workflows)”。

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

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

* **部署 (CD)**。 有关详细信息，请参阅“[连续部署](/zh/enterprise-server@3.22/actions/get-started/continuous-deployment)”。

* **持续集成 (CI)** 。 有关详细信息，请参阅“[持续集成](/zh/enterprise-server@3.22/actions/get-started/continuous-integration)”。

* **自动化**. 自动化工作流模板提供了自动化工作流的解决方案，例如，对拉取请求分类并根据拉取请求中修改的路径对拉取请求应用标签，或问候首次参与存储库的用户。

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

有关详细信息，请参阅“[为组织创建工作流模板](/zh/enterprise-server@3.22/actions/how-tos/reuse-automations/create-workflow-templates)”。

## 后续步骤

若要开始重用工作流，请参阅 [重用工作流](/zh/enterprise-server@3.22/actions/how-tos/reuse-automations/reuse-workflows)。

要查找有关工作流重用细节的信息，请参阅 [重用工作流配置](/zh/enterprise-server@3.22/actions/reference/workflows-and-actions/reusing-workflow-configurations)。