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

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

本页介绍了如果您的实例托管在专用网络中,如何在 GitLab 企业版实例上启用触发器功能。

准备工作

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

    Enable the APIs

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

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

  1. 启用 Service Directory API

  2. 确保您已向打算在其中创建 Service Directory 服务的Google Cloud 项目授予 Project IAM Admin 角色。如需了解如何授予 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. 向 Service Directory 授予对 Cloud Build 服务代理的访问权限:

    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 是包含您的服务目录的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之外的主机

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

创建 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 企业版之间会共享以下数据:

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

后续步骤