Crea repository da GitHub Enterprise in una rete privata

Cloud Build consente di creare trigger su un'istanza GitHub Enterprise. Questa pagina spiega come utilizzare i trigger di GitHub Enterprise per richiamare le build in risposta a commit o richieste di pull da un'istanza GitHub Enterprise e come creare repository da GitHub Enterprise se l'istanza è ospitata in una rete privata.

Prima di iniziare

  • Abilita le API Cloud Build e Service Directory.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    Abilita le API

  • Se non hai creato un pool privato, segui le istruzioni riportate in Creare e gestire pool privati per crearne uno. Avrai bisogno di un pool privato per creare in una rete privata.

Creare repository da GitHub Enterprise in una rete privata

Completa i seguenti passaggi per connettere l'istanza GitHub Enterprise a Cloud Build da una rete privata:

  1. Concedi a Service Directory l'accesso all'agente di servizio 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"
    

    Sostituisci quanto segue:

    • PROJECT_ID è l'ID progetto Cloud Build.
    • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY è l'ID del tuo Google Cloud progetto che contiene Service Directory.
  2. Concedi all'agente di servizio Cloud Build l'accesso alle risorse di rete 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"
    

    Sostituisci quanto segue:

    • PROJECT_ID è l'ID progetto Cloud Build.
    • PROJECT_ID_CONTAINING_NETWORK_RESOURCE è l'ID del tuo Google Cloud progetto che contiene la risorsa di rete.
  3. Configura un servizio Service Directory completando i seguenti passaggi:

    1. Configura uno spazio dei nomi per il tuo servizio:

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

      Sostituisci quanto segue:

      • NAMESPACE è il nome dello spazio dei nomi di Service Directory.
      • LOCATION è la regione in cui crei le connessioni e colleghi i repository.
      • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY è l'ID del tuo Google Cloud progetto che contiene Service Directory.
    2. Configura un servizio per lo spazio dei nomi:

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

      Sostituisci quanto segue:

      • SERVICE è il nome della risorsa Service Directory.
      • NAMESPACE è il nome dello spazio dei nomi di Service Directory.
      • LOCATION è la regione in cui crei le connessioni e colleghi i repository.
    3. Configura un endpoint per il servizio:

       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/global/networks/NETWORK
      

      Sostituisci quanto segue:

      • ENDPOINT_NAME è il nome dell'endpoint.
      • NAMESPACE è il nome dello spazio dei nomi di Service Directory.
      • SERVICE è il nome della risorsa Service Directory.
      • LOCATION è la regione in cui crei le connessioni e colleghi i repository.
      • INSTANCE_IP_ADDRESS è l'indirizzo IP dell'istanza GitHub Enterprise nella rete. Ad esempio, 123.45.67.89. Per saperne di più, consulta Utilizzare Service Directory per raggiungere gli host esterni Google Cloud.
      • PORT è il nome della porta per HTTPS.
      • PROJECT_ID_CONTAINING_NETWORK è l'ID del Google Cloud progetto che contiene la rete VPC.
      • NETWORK è il nome della rete VPC.

    Ora puoi utilizzare la risorsa del servizio (projects/{PROJECT_ID}/locations/{LOCATION}/namespaces/{NAMESPACE}/services/{SERVICE}) per creare la connessione nei seguenti passaggi.

  4. Connetti un host GitHub Enterprise.

  5. Connetti un repository GitHub Enterprise.

  6. Crea un trigger di GitHub Enterprise per creare repository ospitati sulla tua istanza GitHub Enterprise.

Utilizzare Service Directory per raggiungere gli host esterni Google Cloud

Service Directory utilizza l'intervallo di indirizzi IP 35.199.192.0/19 per connettere l'host esterno a Google Cloud. Devi aggiungere questo intervallo a una lista consentita nel firewall. Inoltre, la rete privata deve essere configurata per instradare questo intervallo tramite la connessione Cloud VPN o Cloud Interconnect.

Se la connessione utilizza un router Cloud, puoi configurarla in modo che comunichi l'intervallo alla rete privata.

Per saperne di più, consulta Configurare l'accesso alla rete privata.

Utilizzare Cloud Load Balancing per raggiungere gli host esterni Google Cloud

Se la configurazione di rete non consente di instradare l' intervallo di indirizzi IP di Service Directory 35.199.192.0/19 a Cloud VPN o Cloud Interconnect, puoi creare un bilanciatore del carico utilizzando Cloud Load Balancing che indirizza il traffico all'host.

Quando crei l'endpoint di Service Directory, assicurati di utilizzare l'indirizzo IP della regola di forwarding del bilanciatore del carico anziché l'indirizzo IP dell'host. Puoi utilizzare un bilanciatore del carico HTTPS interno o un bilanciatore del carico del protocollo TCP (Transmission Control Protocol) interno quando crei l'endpoint.

Quando crei il bilanciatore del carico TCP, tieni presente quanto segue:

  • Per raggiungere l'host è necessario solo un gruppo di endpoint di rete (NEG) con connettività ibrida.
  • Il bilanciatore del carico TCP non richiede la chiave privata non criptata per il certificato SSL.
  • La configurazione di Cloud VPN deve utilizzare il router Cloud con routing dinamico globale. Se Cloud VPN utilizza il routing statico, puoi utilizzare un proxy che utilizza Cloud Service Mesh. Per saperne di più, consulta Configurare i servizi di rete edge per i deployment ibridi.

Per saperne di più sulla creazione di un bilanciatore del carico HTTPS, consulta Configurare un bilanciatore del carico delle applicazioni interno con connettività ibrida. Per saperne di più sulla creazione di un bilanciatore del carico TCP, consulta Configurare un bilanciatore del carico di rete proxy interno regionale con connettività ibrida.

Passaggi successivi