Compila repositorios de GitHub Enterprise en una red privada

Cloud Build te permite crear activadores en una instancia de GitHub Enterprise. En esta página, se explica cómo puedes usar los activadores de GitHub Enterprise para invocar compilaciones en respuesta a confirmaciones o solicitudes de extracción desde una instancia de GitHub Enterprise, y cómo puedes compilar repositorios desde GitHub Enterprise si tu instancia se aloja en una red privada.

Antes de comenzar

  • Enable the Cloud Build and Service Directory APIs.

    Enable the APIs

  • Si no creaste un grupo privado, sigue las instrucciones de Crea y administra grupos privados para crear un grupo privado. Necesitarás un grupo privado para compilar en una red privada.

Compila repositorios de GitHub Enterprise en una red privada

Completa los siguientes pasos para conectar tu instancia de GitHub Enterprise a Cloud Build desde una red privada:

  1. Otorga acceso al Directorio de servicios al agente de servicio de 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"
    

    Reemplaza lo siguiente:

    • PROJECT_ID es el ID del proyecto de Cloud Build.
    • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY es el ID de tu Proyecto de Google Cloud que contiene tu Directorio de servicios.
  2. Otorga acceso a los recursos de red de VPC al agente de servicio de 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_NETWORK_RESOURCE \
       --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \
       --role="roles/servicedirectory.pscAuthorizedService"
    

    Reemplaza lo siguiente:

    • PROJECT_ID es el ID de tu proyecto de Cloud Build.
    • PROJECT_ID_CONTAINING_NETWORK_RESOURCE es el ID de tu proyecto de Google Cloud que contiene tu recurso de red.
  3. Para configurar un servicio del Directorio de servicios, completa los siguientes pasos:

    1. Configura un espacio de nombres para tu servicio:

       gcloud service-directory namespaces create NAMESPACE --location=REGION --project=PROJECT_ID_CONTAINING_SERVICE_DIRECTORY
      

      Reemplaza lo siguiente:

      • NAMESPACE es el nombre de tu espacio de nombres del Directorio de servicios.
      • LOCATION es la región en la que creas conexiones y vinculas repositorios.
      • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY es el ID de tu proyecto de Google Cloud que contiene tu directorio de servicios.
    2. Configura un servicio para tu espacio de nombres:

       gcloud service-directory services create SERVICE --namespace=NAMESPACE --location=LOCATION
      

      Reemplaza lo siguiente:

      • SERVICE es el nombre de tu recurso del Directorio de servicios.
      • NAMESPACE es el nombre del espacio de nombres de tu directorio de servicios.
      • LOCATION es la región en la que creas conexiones y vinculas repositorios.
    3. Configura un extremo para tu servicio:

       gcloud service-directory endpoints create ENDPOINT_NAME \
         --namespace=NAMESPACE \
         --service=SERVICE \
         --location=LOCATION \
         --address=INSTANCE_IP_ADDRESS \ 
         --port=PORT \
         --network=projects/PROJECT_ID_CONTAINING_NETWORK/locations/us-central1/ networks/NETWORK
      

      Reemplaza lo siguiente:

      • ENDPOINT_NAME es el nombre de tu extremo.
      • NAMESPACE es el nombre de tu espacio de nombres del Directorio de servicios.
      • SERVICE es el nombre de tu recurso del Directorio de servicios.
      • LOCATION es la región en la que creas conexiones y vinculas repositorios.
      • INSTANCE_IP_ADDRESS es la dirección IP de tu instancia de GitHub Enterprise en tu red. Por ejemplo, 123.45.67.89 Para obtener más información, consulta Cómo usar el Directorio de servicios para llegar a hosts fuera de Google Cloud.
      • PORT es el nombre de tu puerto para HTTPS.
      • PROJECT_ID_CONTAINING_NETWORK es el ID del proyecto de Google Cloud que contiene tu red de VPC.
      • NETWORK es el nombre de tu red de VPC.

    Ahora puedes usar el recurso de servicio (projects/{PROJECT_ID}/locations/{LOCATION}/namespaces/{NAMESPACE}/services/{SERVICE}) para crear tu conexión en los siguientes pasos.

  4. Conecta un host de GitHub Enterprise.

  5. Conecta un repositorio de GitHub Enterprise.

  6. Crea un activador de GitHub Enterprise para compilar repositorios alojados en tu instancia de GitHub Enterprise.

Usa el Directorio de servicios para comunicarte con hosts fuera de Google Cloud

Service Directory usa el rango de direcciones IP 35.199.192.0/19 para conectar tu host fuera de Google Cloud. Debes agregar este rango a una lista de entidades permitidas en tu firewall. Además, tu red privada debe estar para enrutar este rango a través de Cloud VPN conexión.

Si tu conexión usa un Cloud Router, puedes configurarla para que comunique el rango a tu red privada.

Para obtener más información, consulta Configura el acceso a redes privadas.

Usa Cloud Load Balancing para llegar a hosts fuera de Google Cloud

Si la configuración de tu red no te permite enrutar el rango de direcciones IP del directorio de servicios 35.199.192.0/19 a Cloud VPN o Cloud Interconnect, puedes crear un balanceador de cargas con el balanceo de cargas de Cloud que dirija el tráfico a tu host.

Cuando crees el extremo del Directorio de servicios, asegúrate de usar la dirección IP de la regla de reenvío del balanceador de cargas, en lugar de la dirección IP de tu host. Puedes usar un Balanceador de cargas HTTPS interno o un Balanceador de cargas del protocolo de control de transmisión (TCP) interno cuando crees el extremo.

Cuando crees tu balanceador de cargas TCP, ten en cuenta lo siguiente:

  • Solo se requiere un grupo de extremos de red de conectividad híbrida (NEG) para llegar a tu host.
  • El balanceador de cargas de TCP no requiere la clave privada sin encriptar para tu certificado SSL.
  • Tu configuración de Cloud VPN debe usar Cloud Router con datos enrutamiento dinámico. Si tu Cloud VPN usa enrutamiento estático, puedes usar un proxy que use Cloud Service Mesh en su lugar. Para obtener más información, consulta Configura servicios de perímetro de red para implementaciones híbridas.

Para obtener más información sobre cómo crear un balanceador de cargas HTTPS, consulta Configura un balanceador de cargas de aplicaciones interno con conectividad híbrida. Para obtener más información sobre cómo crear un balanceador de cargas TCP, consulta Configura un balanceador de cargas de red del proxy interno regional con conectividad híbrida.

Próximos pasos