注意:GitHub Actions 对 Google Cloud Storage 的支持目前处于 beta 版,可能会更改。
关于 GitHub Actions
的外部存储
GitHub Actions 使用外部 blob 存储来存储工作流运行生成的数据。 存储的数据包括工作流日志、缓存和用户上传的生成工件。有关详细信息,请参阅“GitHub Actions for GitHub Enterprise Server 使用入门”。
可通过两个选项将 GitHub Enterprise Server 配置为连接到外部存储提供程序:
- OpenID Connect (OIDC)
- 使用机密的传统基于凭据的身份验证
建议尽可能使用 OIDC,因为不需要为存储提供程序创建或管理敏感且生存期较长的凭据机密,也不需要冒暴露这些机密的风险。 使用 OIDC 定义信任后,云存储提供程序会自动向 你的 GitHub Enterprise Server 实例 颁发短期访问令牌,这些令牌会自动过期。
先决条件
在启用 GitHub Actions 之前,请确保您已完成以下步骤:
-
创建 Google Cloud Storage 存储桶,用于存储工作流运行生成的数据。
-
查看 GitHub Actions 的硬件要求。 有关详细信息,请参阅“GitHub Actions for GitHub Enterprise Server 使用入门”。
-
必须为 GitHub Enterprise Server 的域配置 TLS。 有关详细信息,请参阅“配置 TLS”。
注意: 我们强烈建议您在 GitHub Enterprise Server 上配置 TLS,并有信任的机构签名的证书。 虽然自签名证书可以工作,但自托管的运行器需要额外的配置,不推荐用于生产环境。
-
如果在 GitHub 上配置了 HTTP 代理服务器:
-
必须将
.localhost
、127.0.0.1
和::1
添加到“HTTP 代理排除”**** 列表(以此顺序)。 -
如果外部存储位置不可路由,则还必须将外部存储 URL 添加到排除列表中。
有关更改代理设置的详细信息,请参阅“配置出站 Web 代理服务器”。
-
如果使用 OIDC 连接到存储提供商,则必须将 你的 GitHub Enterprise Server 实例 上的以下 OIDC 令牌服务 URL 公开到公共 Internet:
https://HOSTNAME/_services/token/.well-known/openid-configuration https://HOSTNAME/_services/token/.well-known/jwks
这确保存储提供商可以联系 你的 GitHub Enterprise Server 实例 进行身份验证。
使用 OIDC 通过 Google Cloud 存储启用 GitHub Actions(推荐)
若要将 GitHub Enterprise Server 配置为结合使用 OIDC 与 Google Cloud 存储,必须先创建 Google Cloud 服务帐户,然后创建 Google Cloud 标识池和标识提供者,最后将 GitHub Enterprise Server 配置为使用提供者和服务帐户访问 Google Cloud 存储存储桶。
1. 创建服务帐户
-
创建可以使用 OIDC 访问存储桶的服务帐户。 有关详细信息,请参阅 Google Cloud 文档中的创建和管理服务帐户。
创建服务帐户时,请确保执行以下操作:
- 按照创建和管理服务帐户开头所述启用 IAM API。
- 将以下角色添加到服务帐户:
- 服务帐户令牌创建者
- 存储对象管理员
-
创建服务帐户后,记下其电子邮件地址,因为稍后需要。 服务帐户电子邮件地址的格式为
SERVICE-ACCOUNT-NAME@PROJECT-NAME.iam.gserviceaccount.com
。
2. 创建标识池和标识提供者
-
在 Google Cloud 控制台中,转到新建工作负载提供者和池页面。
-
在“创建标识池”下,输入标识池的名称,然后单击“继续”。
-
在“将提供者添加到池”下:
-
对于“选择提供者”,选择“OpenID Connect (OIDC)”。
-
对于“提供者名称”,输入提供者的名称。
-
对于“颁发者 (URL)”,输入以下 URL,将
HOSTNAME
替换为 你的 GitHub Enterprise Server 实例 的公共主机名:https://HOSTNAME/_services/token
例如:
https://my-ghes-host.example.com/_services/token
-
在“受众”下,选中“默认受众”,记下标识提供者 URL,因为稍后需要。 标识提供者 URL 的格式为
https://iam.googleapis.com/projects/PROJECT-NUMBER/locations/global/workloadIdentityPools/POOL-NAME/providers/PROVIDER-NAME
。 -
单击 “继续” 。
-
-
在“配置提供者属性”下:
-
对于“OIDC 1”映射,输入
assertion.sub
。 -
在“属性条件”下,单击“添加条件”。
-
对于“条件 CEL”,输入以下条件,将
HOSTNAME
替换为 你的 GitHub Enterprise Server 实例 的公共主机名:google.subject == "HOSTNAME"
例如:
google.subject == "my-ghes-host.example.com"
注意: 此处使用的 你的 GitHub Enterprise Server 实例 的主机名不得包含协议。
-
单击“ 保存”。
-
-
创建标识池后,在标识池页面的顶部,单击“授予访问权限”。
- 在“选择服务帐户”下,选择在上一过程中创建的服务帐户。
- 在“选择主体(可访问服务帐户的标识)”下,选择“仅限匹配筛选器的标识”。
- 对于“属性名称”,选择“主题”。
- 对于“属性值”,请输入不含协议的 GitHub Enterprise Server 主机名。 例如,
my-ghes-host.example.com
。 - 单击“保存” 。
- 可以关闭“配置应用程序”对话框,因为不需要配置文件。
3. 将 GitHub Enterprise Server 配置为使用 OIDC 连接到 Google Cloud 存储
-
在 GitHub Enterprise Server 上的管理帐户中,在任一页面的右上角,单击 。
-
如果你尚未在“站点管理员”页上,请在左上角单击“站点管理员”。
-
在“ 站点管理”边栏中,单击“管理控制台”。
-
在“设置”边栏中,单击“操作”。
-
在“GitHub Actions”下,选择“启用 GitHub Actions”。
-
在“项目和日志存储”下的“Google Cloud 存储”旁,单击“设置”。
-
在“身份验证”下,选择“OpenID Connect (OIDC)”,然后输入存储的值:
-
服务 URL:存储桶的服务 URL。 通常为
https://storage.googleapis.com
。 -
存储桶名称:存储桶的名称。
-
工作负载标识提供者 ID:标识池的标识提供者 ID。
它的格式是
projects/PROJECT-NUMBER/locations/global/workloadIdentityPools/POOL-NAME/providers/PROVIDER-NAME
。 请注意,必须删除在先前过程中记下的值中的https://iam.googleapis.com/
前缀。例如,
projects/1234567890/locations/global/workloadIdentityPools/my-pool/providers/my-provider
。 -
服务帐户:在先前过程中记下的服务帐户电子邮件地址。 例如,
ghes-oidc-service-account@my-project.iam.gserviceaccount.com
。
-
-
单击“测试存储设置”按钮验证存储设置。
如果在验证存储设置时出现任何错误,请检查存储提供程序设置并重试。
-
在“设置”边栏下,单击“保存设置”。
注意:保存 管理控制台 中的设置会重启系统服务,这可能会导致用户可察觉的停机时间。
-
等待配置运行完毕。
使用 HMAC 密钥通过 Google Cloud 存储 启用 GitHub Actions
-
创建可访问存储桶的 Google Cloud 服务帐户,并为服务帐户创建基于哈希的消息身份验证码 (HMAC) 密钥。 有关详细信息,请参阅 Google Cloud 文档中的“管理服务帐户的 HMAC 密钥”。
服务帐户必须具有以下对存储桶的身份验证和访问控制管理 (IAM) 权限:
storage.objects.create
storage.objects.get
storage.objects.list
storage.objects.update
storage.objects.delete
storage.multipartUploads.create
storage.multipartUploads.abort
storage.multipartUploads.listParts
storage.multipartUploads.list
1. 在 GitHub Enterprise Server 上的管理帐户中,在任一页面的右上角,单击 。
-
如果你尚未在“站点管理员”页上,请在左上角单击“站点管理员”。
-
在“ 站点管理”边栏中,单击“管理控制台”。
-
在“设置”边栏中,单击“操作”。
-
在“GitHub Actions”下,选择“启用 GitHub Actions”。
-
在“项目和日志存储”下的“Google Cloud 存储”旁,单击“设置”。
-
在“身份验证”下,选择“基于凭据”,然后输入存储桶的详细信息:
- 服务 URL:存储桶的服务 URL。 通常为
https://storage.googleapis.com
。 - 存储桶名称:存储桶的名称。
- HMAC 访问 ID 和 HMAC 机密:存储帐户的 Google Cloud 访问 ID 和机密。 有关详细信息,请参阅 Google Cloud 文档中的“管理服务帐户的 HMAC 密钥”。
- 服务 URL:存储桶的服务 URL。 通常为
-
单击“测试存储设置”按钮验证存储设置。
如果在验证存储设置时出现任何错误,请检查存储提供程序设置并重试。
-
在“设置”边栏下,单击“保存设置”。
注意:保存 管理控制台 中的设置会重启系统服务,这可能会导致用户可察觉的停机时间。
-
等待配置运行完毕。
后续步骤
配置运行成功完成后,GitHub Actions 将在 GitHub 上启用。 对于后续步骤,例如管理 GitHub Actions 访问权限和添加自托管运行器,请返回到“GitHub Actions for GitHub Enterprise Server 使用入门”。