在专用网络中从 GitLab Enterprise Edition 构建代码库

借助 Cloud Build,您可以创建触发器,以便通过 GitLab Enterprise Edition 上托管的代码库进行构建,从而让您能够执行构建来响应与 GitLab Enterprise Edition 代码库关联的提交推送或合并请求等事件。

本页面介绍了如何在 GitLab Enterprise Edition 实例托管在专用网络中的情况下,在该实例上启用触发器功能。

准备工作

  • Enable the Cloud Build, Secret Manager, Compute Engine, and Service Networking APIs.

    Enable the APIs

在专用网络中从 GitLab Enterprise Edition 构建代码库

如果您的 GitLab Enterprise Edition 实例只能在 VPC 网络内访问,您需要设置 Service Directory 服务并使用专用池进行构建。包含 VPC 网络的项目可以与包含 Service Directory 服务的项目不同。请按照以下说明操作,确保您的实例在创建触发器之前可访问:

  1. 启用 Service Directory API

  2. 确保您已获得项目 IAM 管理员角色,并且该角色适用于您打算在其中创建 Service Directory 服务的Google Cloud 项目。如需了解如何授予 IAM 角色,请参阅配置对 Cloud Build 资源的访问权限

  3. 如需设置 Service Directory 服务,请完成以下步骤:

    1. 为您的 Google Cloud 项目配置命名空间

      您在命名空间中指定的区域必须与您在 Cloud Build 主机连接中指定的区域一致。

    2. 在命名空间中配置服务

    3. 为已注册的服务配置端点

      配置端点时,您必须使用内部 IP 地址并指定 HTTPS 端口号,以便 Cloud Build 能够访问您的服务。

    如需详细了解专用网络访问配置,请参阅配置专用网络访问。 Service Directory 还提供与负载平衡器和 Google Kubernetes Engine (GKE) 等服务的集成。如需了解详情,请参阅 Service Directory 和负载均衡概览Service Directory for GKE 概览

  4. 向 Cloud Build 服务代理授予 Service Directory 访问权限:

    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    export CLOUD_BUILD_SERVICE_AGENT="service-$PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding  PROJECT_ID_CONTAINING_SERVICE_DIRECTORY \
       --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \
       --role="roles/servicedirectory.viewer"
    

    替换以下内容:

    • PROJECT_ID 是您的 Cloud Build 项目 ID。
    • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY 是包含您的 Service Directory 的Google Cloud 项目的 ID。
  5. 向 Cloud Build 服务代理授予 VPC 网络资源访问权限:

    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    export CLOUD_BUILD_SERVICE_AGENT="service-$PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding PROJECT_ID_CONTAINING_NETWORK_RESOURCE \
       --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \
       --role="roles/servicedirectory.pscAuthorizedService"
    

    替换以下内容:

    • PROJECT_ID 是您的 Cloud Build 项目 ID。
    • PROJECT_ID_CONTAINING_NETWORK_RESOURCE 是包含您的网络资源的Google Cloud 项目的 ID。
  6. 使用专用池运行构建。如果您尚未创建专用池,请参阅创建新的专用池

  7. 按照说明创建 GitLab Enterprise Edition 触发器,以构建托管在 GitLab Enterprise Edition 实例上的代码库。

    如果您在将 GitLab Enterprise Edition 主机连接到 Cloud Build 时包含自签名证书或私有证书,则必须将主机 URI 设置为证书的正文备用名称 (SAN)。

现在,您的 GitLab Enterprise Edition 触发器将根据您的配置自动在 GitLab Enterprise Edition 实例上调用构建。

使用 Service Directory 访问 Google Cloud外部的主机

Service Directory 使用 IP 地址范围 35.199.192.0/19 连接 Google Cloud之外的主机。您必须将此范围添加到防火墙的许可名单中。此外,您还需要配置专用网络,以通过 Cloud VPN 或 Cloud Interconnect 连接路由此范围。

如果您的连接使用 Cloud Router,您可以配置连接,以将该范围传达给您的专用网络。

如需了解详情,请参阅配置专用网络访问

使用 Cloud Load Balancing 访问 Google Cloud之外的主机

如果您的网络配置不允许您将 Service Directory IP 地址范围 35.199.192.0/19 路由到 Cloud VPN 或 Cloud Interconnect,您可以使用 Cloud Load Balancing 创建负载均衡器,将流量导向您的主机。

创建 Service Directory 端点时,请务必使用负载均衡器的转发规则的 IP 地址,而不是主机的 IP 地址。创建端点时,您可以使用内部 HTTPS 负载均衡器内部传输控制协议 (TCP) 负载均衡器

创建 TCP 负载均衡器时,请考虑以下事项:

  • 只需使用混合连接网络端点组 (NEG) 即可访问您的主机。
  • TCP 负载均衡器不需要 SSL 证书的未加密私钥。
  • 您的 Cloud VPN 设置需要使用 Cloud Router 和全球动态路由。如果您的 Cloud VPN 使用静态路由,您可以改用使用 Cloud Service Mesh 的代理。如需了解详情,请参阅为混合部署设置网络边缘服务

如需详细了解如何创建 HTTPS 负载均衡器,请参阅设置具有混合连接的内部应用负载均衡器。 如需详细了解如何创建 TCP 负载均衡器,请参阅设置具有混合连接的区域级内部代理网络负载均衡器

数据共享

从 Cloud Build 发送到 GitLab Enterprise Edition 的数据有助于您按名称识别触发器,并在 GitLab Enterprise Edition 代码库中查看构建结果。

Cloud Build 和 GitLab Enterprise Edition 之间会共享以下数据:

  • Google Cloud 项目 ID
  • 触发器名称

后续步骤