Skip to main content

从 GitHub.com 手动同步操作

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

注意

GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。

GitHub Actions 上的 GitHub Enterprise Server 设计为在没有完全 Internet 访问权限的环境中工作。 默认情况下,工作流不能使用直接来自 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更新操作,应始终在任何actions-sync升级(主要或次要)后重新运行GitHub Enterprise Server,以确保操作保持最新状态。

关于 actions-sync 工具

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

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

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

注意

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 组织的所有者。

    注意

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

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

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

示例:使用 actions-sync 工具

此示例演示如何使用 actions-sync 工具将单个操作从 GitHub.com 同步到企业实例。

注意

此示例使用 actions-sync sync 命令,此命令需要你的计算机同时访问 GitHub.com API 和你的企业实例的 API。 如果一次只能访问一个系统,可以使用 actions-sync pullpush 命令。 请参阅 actions-sync README

  1. 下载并提取适用于计算机操作系统的最新 actions-sync 版本

  2. 创建一个目录来存储工具的缓存文件。

  3. 在终端中,更改为刚才提取的发布目录中的 bin 目录。 例如:

    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. 在企业中创建操作仓库后,企业中的人员可以使用目标仓库在其工作流程中引用操作。 对于上面显示的示例操作:

    # 此工作流使用未经 GitHub 认证的操作。
    # 它们由第三方提供,并受
    # 单独的服务条款、隐私政策和支持
    # 文档。
    uses: synced-actions/actions-stale@v1
    

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