Connettersi a un host GitLab Enterprise Edition

Questa pagina spiega come connettersi all'host GitLab Enterprise Edition a Cloud Build.

Prima di iniziare

  • Abilita le API Cloud Build and Secret Manager.

    Abilita le API

Requisiti dell'host

  • Se non hai installato un'istanza GitLab Enterprise Edition Server, consulta la guida all'installazione di GitLab Enterprise Edition per le istruzioni.

    Quando segui le istruzioni per installare un'istanza del server GitLab Enterprise Edition, tieni presente quanto segue:

    • Devi configurare il tuo host per gestire il protocollo HTTPS. Gli host configurati con il protocollo HTTP non sono supportati.

    • Devi configurare l'host con lo stesso URL utilizzato per raggiungere l'host da Google Cloud. Per saperne di più, consulta la documentazione di GitLab su come configurare l'URL esterno.

Autorizzazioni IAM richieste

Per connettere l'host GitLab Enterprise Edition, concedi il ruolo Amministratore connessioni di Cloud Build (roles/cloudbuild.connectionAdmin) al tuo account utente.

Per aggiungere i ruoli richiesti al tuo account utente, consulta Configurazione dell'accesso alle risorse di Cloud Build. Per saperne di più sui ruoli IAM associati a Cloud Build, consulta Ruoli e autorizzazioni IAM.

Se la tua istanza GitLab Enterprise Edition è ospitata su una rete privata, consulta Creare repository da GitLab Enterprise Edition in una rete privata per scoprire i ruoli IAM aggiuntivi richiesti prima della connessione all'host.

Connessione a un host GitLab Enterprise Edition

Prima di creare una connessione host per l'istanza GitLab Enterprise Edition, devi creare token di accesso personale in GitLab Enterprise Edition completando i seguenti passaggi:

  1. Accedi alla tua istanza GitLab Enterprise Edition.

  2. Nella pagina GitLab Enterprise Edition per la tua istanza, fai clic sul tuo avatar nell'angolo in alto a destra.

  3. Fai clic su Modifica profilo.

  4. Nella barra laterale sinistra, seleziona Token di accesso.

    Verrà visualizzata la pagina Personal Access Tokens (Token accesso personale).

  5. Crea un token di accesso con l'ambito api da utilizzare per connettere e scollegare i repository.

  6. Crea un token di accesso con l'ambito read_api per assicurarti che i repository Cloud Build possano accedere al codice sorgente nei repository.

Console

Per connettere l'host GitLab Enterprise Edition a Cloud Build:

  1. Apri la pagina Repositories nella console Google Cloud.

    Apri la pagina Repository

    Verrà visualizzata la pagina Repositories.

  2. Nella parte superiore della pagina, seleziona la scheda 2a generazione.

  3. Nel selettore di progetti nella barra superiore, seleziona il tuo progetto Google Cloud.

  4. Fai clic su Crea connessione host per connettere un nuovo host a Cloud Build.

  5. Nel riquadro a sinistra, seleziona GitLab come fornitore di origine.

  6. Nella sezione Configura connessione, inserisci le seguenti informazioni:

    1. Regione: seleziona una regione per la connessione.

    2. Nome: inserisci un nome per la connessione.

  7. Nella sezione Dettagli host, seleziona o inserisci le seguenti informazioni:

    1. Provider GitHub: seleziona GitLab Enterprise Edition autogestito come provider.

    2. Host URL (URL host): inserisci l'URL host per la connessione. Ad esempio, https://my-gle-server.net.

    3. Certificato CA: fai clic su Sfoglia per caricare il tuo certificato autofirmato.

    4. In Tipo di connessione, seleziona una delle seguenti opzioni:

      1. Internet pubblica: seleziona questa opzione se l'istanza è accessibile tramite la rete internet pubblica.

      2. Accesso alla rete privata: seleziona questa opzione se l'istanza è ospitata in una rete privata.

      3. In Servizio Service Directory, seleziona la località del servizio:

        • Nel progetto your-project
        • In un altro progetto
        • Inserisci manualmente
        1. Se selezioni In un altro progetto o Inserisci manualmente, inserisci le seguenti informazioni:

          • Progetto: inserisci o seleziona il tuo ID progetto Google Cloud dal menu a discesa.

          • Regione: questo campo preseleziona la regione della connessione. La regione specificata per il servizio deve corrispondere a quella associata alla tua connessione.

        2. Spazio dei nomi: seleziona lo spazio dei nomi del tuo servizio.

        3. Servizio: seleziona il nome del servizio nello spazio dei nomi.

  8. Nella sezione Token di accesso personali, inserisci le seguenti informazioni:

    1. Token di accesso API: inserisci il token con l'accesso all'ambito api. Questo token viene utilizzato per collegare e scollegare i repository.

    2. Lettura token di accesso all'API: inserisci il token con l'accesso all'ambito read_api. I trigger di Cloud Build utilizzano questo token per accedere al codice sorgente nei repository.

  9. Fai clic su Connetti.

    Dopo aver fatto clic sul pulsante Connetti, i token di accesso personali vengono archiviati in modo sicuro in Secret Manager. Dopo la connessione host, Cloud Build crea anche un secret webhook per tuo conto. Puoi visualizzare e gestire i secret nella pagina di Secret Manager. Puoi visualizzare e gestire i tuoi secret nella pagina Secret Manager.

Hai creato una connessione GitLab Enterprise Edition.

gcloud

Prima di connettere l'host GitLab Enterprise Edition a Cloud Build, completa i seguenti passaggi per archiviare le tue credenziali:

  1. Archivia il token in Secret Manager.

  2. Crea un secret webhook in Secret Manager eseguendo il comando seguente:

     cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-
    
  3. Se archivi i secret in un progetto Google Cloud diverso da quello che prevedi di utilizzare per creare una connessione host, inserisci il comando seguente per concedere al progetto l'accesso all'agente di servizio Cloud Build:

    PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:CLOUD_BUILD_SERVICE_AGENT \
      --role="roles/secretmanager.admin"
    

    Dove:

    • PROJECT_ID è l'ID del tuo progetto Google Cloud.
    • CLOUD_BUILD_SERVICE_AGENT è il tuo account di servizio Cloud Build.

Ora puoi procedere con la connessione del tuo host GitLab Enterprise Edition a Cloud Build.

Procedi con i seguenti passaggi:

  1. Inserisci il comando seguente per creare una connessione GitLab Enterprise Edition:

    gcloud builds connections create gitlab CONNECTION_NAME \
      --host-uri=HOST_URI \
      --project=PROJECT_ID \
      --region=REGION \
      --authorizer-token-secret-version=projects/PROJECT_ID/secrets/API_TOKEN/versions/SECRET_VERSION \
      --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_TOKEN/versions/SECRET_VERSION \
      --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET/versions/SECRET_VERSION
    

    Dove:

    • CONNECTION_NAME è il nome della tua connessione.
    • HOST_URI è l'URI della tua istanza GitLab Enterprise Edition. Ad esempio, https://my-gle-server.net.
    • PROJECT_ID è l'ID del tuo progetto Google Cloud.
    • REGION è la regione per la tua connessione.
    • API_TOKEN è il nome del token con l'apiambito.
    • READ_TOKEN è il nome del token con l'read_apiambito.
    • SECRET_VERSION è la versione del tuo secret.
    • WEBHOOK_SECRET è il tuo secret per il webhook.

Hai creato una connessione GitLab Enterprise Edition.

Terraform

Puoi connettere l'host GitLab Enterprise Edition a Cloud Build utilizzando Terraform.

Nell'esempio riportato di seguito, lo snippet di codice esegue quanto segue:

  • Configura il provider Google Terraform
  • Crea un secret per archiviare il token di accesso personale GitLab Enterprise Edition
  • Concede all'agente di servizio Cloud Build le autorizzazioni necessarie per accedere ai secret
  • Crea una connessione GitLab Enterprise Edition

    // Configure the Terraform Google provider
    terraform {
      required_providers {
        google = {}
      }
    }
    
    // Create secrets and grant permissions to the service sgent
    resource "google_secret_manager_secret" "api-pat-secret" {
        project = "PROJECT_ID"
        secret_id = "GITLAB_PAT_API"
    
        replication {
            automatic = true
         }
     }
    
     resource "google_secret_manager_secret_version" "api-pat-secret-version" {
         secret = google_secret_manager_secret.api-pat-secret.id
         secret_data = "GITLAB_API_TOKEN"
     }
    
     resource "google_secret_manager_secret" "read-pat-secret" {
         project = "PROJECT_ID"
         secret_id = "GITLAB_PAT_READ"
    
         replication {
             automatic = true
         }
    }
    
    resource "google_secret_manager_secret_version" "read-pat-secret-version" {
        secret = google_secret_manager_secret.pat-secret.id
        secret_data = "GITLAB_API_TOKEN"
    }
    
    resource "google_secret_manager_secret" "webhook-secret-secret" {
        project = "PROJECT_ID"
        secret_id = "WEBHOOK_SECRET"
    
        replication {
            automatic = true
        }
    }
    
    resource "google_secret_manager_secret_version" "webhook-secret-secret-version" {
        secret = google_secret_manager_secret.webhook-secret-secret.id
        secret_data = "WEBHOOK_SECRET_VALUE"
    }
    
    data "google_iam_policy" "serviceagent-secretAccessor" {
        binding {
            role = "roles/secretmanager.secretAccessor"
            members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"]
        }
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy-pak" {
      project = google_secret_manager_secret.private-key-secret.project
      secret_id = google_secret_manager_secret.private-key-secret.secret_id
      policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy-rpak" {
      project = google_secret_manager_secret.webhook-secret-secret.project
      secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id
      policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy-whs" {
      project = google_secret_manager_secret.webhook-secret-secret.project
      secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id
      policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data
    }
    
    // Create the connection and add the repository resource
    resource "google_cloudbuildv2_connection" "my-connection" {
        project = "PROJECT_ID"
        location = "REGION"
        name = "CONNECTION_NAME"
    
        gitlab_config {
            authorizer_credential {
                user_token_secret_version = google_secret_manager_secret_version.pat-secret-version.id
            }
            read_authorizer_credential {
                 user_token_secret_version = google_secret_manager_secret_version.pat-secret-version.id
            }
            webhook_secret_secret_version = google_secret_manager_secret_version.webhook-secret-secret-version.id
        }
    
        depends_on = [
            google_secret_manager_secret_iam_policy.policy-pak,
            google_secret_manager_secret_iam_policy.policy-rpak,
            google_secret_manager_secret_iam_policy.policy-whs
        ]
    }
    

Dove:

  • PROJECT_ID è l'ID del tuo progetto Google Cloud.
  • GITLAB_PAT_API è il tuo token di accesso personale con accesso a api.
  • GITLAB_API_TOKEN è il tuo token di accesso personale.
  • GITLAB_PAT_READ è il tuo token di accesso personale con accesso read_api.
  • WEBHOOK_SECRET è il nome del secret contenente il valore del secret per il webhook.
  • WEBHOOK_SECRET_VALUE è il valore del secret del tuo webhook.
  • REGION è la regione per la tua connessione.
  • CONNECTION_NAME è il nome della tua connessione GitLab Enterprise Edition.
  • URI è l'URI della connessione. Ad esempio, https://my-gitlab-enterprise-server.net. Hai creato una connessione GitLab Enterprise Edition.

Passaggi successivi