Skip to main content

管理自定义操作

了解如何创建和管理自己的操作,以及如何自定义 GitHub 社区共享的操作。

选择操作的位置

如果是开发供其他人使用的操作,我们建议将该操作保持在其自己的仓库中,而不是与其他应用程序代码一起捆绑。 这可让您管理操作版本以及跟踪和发行操作,就像任何其他软件一样。

若要在不公开发布操作的情况下在整个企业中共享操作,可以将操作存储在内部存储库中,然后将存储库配置为允许访问同一组织或企业中任何组织拥有的其他存储库中的 GitHub Actions 工作流。 有关详细信息,请参阅“与企业共享操作和工作流”。

您可以将操作的文件存储在您的仓库中的任何位置。 如果计划将操作、工作流和应用程序代码合并到一个存储库中,建议将操作存储在 .github 目录中。 例如,.github/actions/action-a.github/actions/action-b

确保与其他平台的兼容性

许多人在 GitHub.com 之外的域中访问 GitHub,例如 GHE.com 或 GitHub Enterprise Server 的自定义域。

若要确保操作与其他平台兼容,请勿使用对 API URL 的任何硬编码引用,例如 https://api.github.com。 转而,你可以:

  • 使用环境变量(请参阅“变量参考”):

    • 对于 REST API,请使用 GITHUB_API_URL 环境变量。
    • 对于 GraphQL,请使用 GITHUB_GRAPHQL_URL 环境变量。
  • 使用 @actions/github 等工具包,它可自动设置正确的 URL。

针对操作使用发布管理

本节介绍如何使用发行版管理以可预测的方式将更新分发给操作。

发行版管理的良好做法

如果您正在开发供其他人使用的操作,建议使用发行版管理来控制分发更新的方式。 用户期望操作的补丁版本包括必要的关键修补程序和安全补丁,同时仍与其现有工作流程保持兼容。 每当更改影响兼容性时,应考虑发布新的主要版本。

在此发行版管理方法下,用户不应引用操作的默认分支,因为它可能包含最新的代码,因此可能不稳定。 相反地,您可以建议用户在使用您的操作时指定主要版本,并且仅在遇到问题时将其定向到更具体的版本。

要使用特定的操作版本,用户可以配置其 GitHub Actions 工作流程定向标记、 提交的 SHA 或为发行版指定的分支。

使用标记进行发行版管理

建议使用标记进行操作发行版管理。 使用这种方法,您的用户可以轻松地区分主要和次要版本:

  • 创建发布标记(例如 v1.0.2)之前,创建并验证发布分支上的发布(例如 release/v1)。
  • 使用语义版本管理创建发行版。 有关详细信息,请参阅“管理仓库中的发行版”。
  • 移动主要版本标记(例如 v1v2),以指向当前发布的 Git 引用。 有关详细信息,请参阅“Git 基础知识 - 标记”。
  • 针对破坏现有工作流的更改引入新的主要版本标记 (v2)。 例如,更改操作的输入就是破坏性的更改。
  • 主要版本最初发布时可以使用 beta 标记来指示其状态,例如 v2-beta。 准备就绪后,可以删除 -beta 标记。

此示例演示用户如何引用主要发行版标记:

steps:
    - uses: actions/javascript-action@v1

此示例演示用户如何引用特定补丁发行版标记:

steps:
    - uses: actions/[email protected]

使用分支进行发行版管理

如果希望使用分支名称进行发行版管理,此示例演示如何引用指定的分支:

steps:
    - uses: actions/javascript-action@v1-beta

使用提交的 SHA 进行发行版管理

每个 Git 提交都会收到一个计算出来的 SHA 值,该值是唯一且不可更改的。 您操作的用户可能更喜欢依赖提交的 SHA 值,因为此方法会比指定可删除或移动的标记更可靠。 但是,这意味着用户将不会收到对该操作所做的进一步更新。 必须使用提交的完整 SHA 值,而不是缩写值。

steps:
    - uses: actions/javascript-action@a824008085750b8e136effc585c3cd6082bd575f

为操作创建自述文件

如果计划公开分享您的操作,建议创建自述文件以帮助人们了解如何使用您的操作。 可以将此信息包含在 README.md 中:

  • 操作的详细描述
  • 必要的输入和输出变量
  • 可选的输入和输出变量
  • 操作使用的密码
  • 操作使用的环境变量
  • 如何在工作流程中使用操作的示例