Skip to main content

手动从 GitHub.com 同步操作

对于需要访问 GitHub.com 上操作的用户,您可以将特定操作同步到企业。

Note

GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。

GitHub Enterprise Server 上的 GitHub Actions 设计为在无法完全访问互联网的环境中工作。 默认情况下,工作流不能使用直接来自 GitHub.com 和 GitHub Marketplace 的操作。

建议使用 GitHub Connect 启用对所有操作的自动访问,以便将 GitHub Enterprise Server 与 GitHub Enterprise Cloud 集成。 请参阅“使用 GitHub Connect 启用对 GitHub.com 操作的自动访问”。

但是,如果想更严格地控制企业中允许的操作,可以按照本指南使用开放源代码 actions-sync 工具将各个操作存储库从 GitHub.com 同步到企业。

当升级 GitHub Enterprise Server 时,捆绑的操作会自动替换为升级包中的默认版本。 这些可能不是最新的可用版本。 最佳做法是,如果使用 actions-sync 更新操作,则应始终在任何 GitHub Enterprise Server 升级(主要或次要)后重新运行 actions-sync,以确保操作保持最新状态。

关于 actions-sync 工具

actions-sync 工具必须在可以访问 GitHub.com API 和 GitHub Enterprise Server 实例的 API 的计算机上运行。 计算机不需要同时连接到两者。

如果计算机可以同时访问这两个系统,则可以使用单一 actions-sync sync 命令进行同步。 如果一次只能访问一个系统,可以使用 actions-sync pullpush 命令。

actions-sync 工具只能从存储在公共存储库中的 GitHub.com 下载操作。

Note

actions-sync 工具适用于未启用 GitHub Connect 的系统。 如果在启用了 GitHub Connect 的系统上运行该工具,则可能会看到错误 The repository <repo_name> has been retired and cannot be reused。 这表示工作流已直接在 GitHub.com 上使用了该操作,并且命名空间已在 你的 GitHub Enterprise Server 实例上停用。 请参阅“使用 GitHub Connect 启用对 GitHub.com 操作的自动访问”。

先决条件

  • 在使用 actions-sync 工具之前,必须确保所有目标组织已经存在于企业中。 以下示例演示如何将操作同步到名为 synced-actions 的组织。 请参阅“从头开始创建新组织”。

  • 必须在企业上创建可以创建并写入目标组织中的存储库的personal access token。 请参阅“管理个人访问令牌”。

  • 如果想同步 你的 GitHub Enterprise Server 实例上 actions 组织中的捆绑操作,你需要是 actions 组织的所有者。

    Note

    默认情况下,即使站点管理员也不是捆绑的 actions 组织的所有者。

    站点管理员可以在管理 shell 中使用 ghe-org-admin-promote 命令将用户升级为捆绑的 actions 组织的所有者。 请参阅“访问管理 shell (SSH)”和“命令行实用程序”。

    ghe-org-admin-promote -u USERNAME -o actions
    

Example: Using the actions-sync tool

This example demonstrates using the actions-sync tool to sync an individual action from GitHub.com to an enterprise instance.

Note

This example uses the actions-sync sync command, which requires concurrent access to both the GitHub.com API and your enterprise instance's API from your machine. If you can only access one system at a time, you can use the actions-sync pull and push commands. See the actions-sync README.

  1. Download and extract the latest actions-sync release for your machine's operating system.

  2. Create a directory to store cache files for the tool.

  3. In your terminal, change to the bin directory within the release directory you just extracted. For example:

    cd PATH/TO/gh_DATETIME_OS_ARCHITECTURE/bin
    
  4. 运行 actions-sync sync 命令:

    ./actions-sync sync \
      --cache-dir "cache" \
      --destination-token "aabbccddeeffgg" \
      --destination-url "https://my-ghes-instance" \
      --repo-name "actions/stale:synced-actions/actions-stale"
    

    上述命令使用以下参数:

    • --cache-dir:运行命令的计算机上的缓存目录。

    • --destination-token:目标企业实例的personal access token。

    • --destination-url:目标企业实例的 URL。

    • --repo-name:要同步的操作存储库。其采用格式 owner/repository:destination_owner/destination_repository

      • 上面的示例将 actions/stale 存储库同步到目标企业实例上的 synced-actions/actions-stale 存储库。 在运行上述命令之前,必须在企业中创建名为 synced-actions 的组织。
      • 如果省略 :destination_owner/destination_repository,工具将使用企业的原始所有者和存储库名称。 在运行命令之前,必须在企业中创建一个与操作的所有者名称匹配的新组织。 考虑使用一个中心组织来存储企业中同步的操作,因为这样在同步来自不同所有者的操作时,将无需创建多个新的组织。
      • 可以通过将 --repo-name 参数替换为 --repo-name-list--repo-name-list-file 来同步多个操作。 请参阅 actions-sync README
  5. 在企业中创建操作仓库后,企业中的人员可以使用目标仓库在其工作流程中引用操作。 对于上面显示的示例操作:

    uses: synced-actions/actions-stale@v1
    

    请参阅“GitHub Actions 的工作流语法”。