Verbindung zu einem GitLab Enterprise Edition-Host herstellen

Auf dieser Seite wird beschrieben, wie Sie eine Verbindung zwischen einem GitLab Enterprise Edition-Host und Cloud Build herstellen.

Hinweis

  • Aktivieren Sie die Cloud Build und Secret Manager APIs.

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen.

    APIs aktivieren

Hostanforderungen

  • Wenn Sie noch keine GitLab Enterprise Edition-Serverinstanz installiert haben, finden Sie in der Installations anleitung von GitLab Enterprise Edition eine Anleitung.

    Beachten Sie beim Installieren einer GitLab Enterprise Edition-Serverinstanz Folgendes:

    • Sie müssen Ihren Host so konfigurieren, dass er das HTTPS-Protokoll verarbeitet. Hosts, die mit dem HTTP-Protokoll konfiguriert sind, werden nicht unterstützt.

    • Sie müssen Ihren Host mit derselben URL konfigurieren, die verwendet wird, um Ihren Host zu erreichen Google Cloud. Weitere Informationen finden Sie in der GitLab-Dokumentation zum Konfigurieren der externen URL.

Erforderliche IAM-Berechtigungen

Zum Verbinden Ihres GitLab Enterprise Edition-Hosts weisen Sie Ihrem Nutzerkonto die Rolle „Cloud Build-Verbindungsadministrator“ (roles/cloudbuild.connectionAdmin) zu.

Informationen zum Hinzufügen der erforderlichen Rollen zu Ihrem Nutzerkonto finden Sie unter Zugriff auf Cloud Build-Ressourcen konfigurieren. Weitere Informationen zu IAM-Rollen, die mit Cloud Build verknüpft sind, finden Sie unter IAM-Rollen und -Berechtigungen.

Wenn Ihre GitLab Enterprise Edition-Instanz in einem privaten Netzwerk gehostet wird, finden Sie unter Repositories aus GitLab Enterprise Edition in einem privaten Netzwerk erstellen Informationen zu zusätzlichen IAM-Rollen, die vor der Hostverbindung erforderlich sind.

Verbindung zu einem GitLab Enterprise Edition-Host herstellen

Bevor Sie eine Hostverbindung für Ihre GitLab Enterprise Edition-Instanz erstellen, müssen Sie persönliche Zugriffstokens in GitLab Enterprise Edition erstellen. Führen Sie dazu die folgenden Schritte aus:

  1. Melden Sie sich in Ihrer GitLab Enterprise Edition-Instanz an.

  2. Klicken Sie auf der GitLab Enterprise Edition-Seite für Ihre Instanz rechts oben auf Ihren Avatar.

  3. Klicken Sie auf Profil bearbeiten.

  4. Wählen Sie in der linken Seitenleiste Zugriffstokens aus.

    Die Seite „Persönliche Zugriffstokens“ wird angezeigt.

  5. Erstellen Sie ein Zugriffstoken mit dem Bereich api, das zum Verbinden und Trennen von Repositories verwendet wird.

  6. Erstellen Sie ein Zugriffstoken mit dem Bereich read_api, damit Cloud Build-Repositories auf Quellcode in Repositories zugreifen können.

Console

So verbinden Sie Ihren GitLab Enterprise Edition-Host mit Cloud Build:

  1. Öffnen Sie in der Google Cloud console die Seite Repositories.

    Zur Seite „Repositories“

    Die Seite Repositories wird angezeigt.

  2. Wählen Sie oben auf der Seite den Tab 2. Generation aus.

  3. Wählen Sie in der Projektauswahl in der oberen Leiste Ihr Google Cloud projekt aus.

  4. Klicken Sie auf Hostverbindung erstellen , um einen neuen Host mit Cloud Build zu verbinden.

  5. Wählen Sie im linken Bereich GitLab als Quellanbieter aus.

  6. Geben Sie im Bereich Verbindung konfigurieren die folgenden Informationen ein:

    • Region: Wählen Sie eine Region für Ihre Verbindung aus.

    • Name: Geben Sie einen Namen für Ihre Verbindung ein.

  7. Wählen Sie im Bereich Hostdetails die folgenden Informationen aus oder geben Sie sie ein:

    • GitLab-Host: Wählen Sie Selbstverwaltete GitLab Enterprise Edition aus.

    • Host-URL: Geben Sie die Host-URL für Ihre Verbindung ein. Beispiel: https://my-gle-server.net.

  8. Optional: Wenn Sie die Verschlüsselungsschlüssel verwalten möchten, die zum Verschlüsseln der Zugriffstokens für Ihre GitLab Enterprise Edition-Repositories verwendet werden, rufen Sie den Bereich Verschlüsselung auf und wählen Sie einen Cloud Key Management Service-Schlüssel aus. Weitere Informationen finden Sie unter Kundenverwaltete Verschlüsselungsschlüssel für Secret Manager aktivieren.

  9. Wählen Sie im Bereich Netzwerk unter Verbindungstyp eine der folgenden Optionen aus:

    • Öffentliches Internet: Wählen Sie diese Option aus, wenn Ihre Instanz über das öffentliche Internet zugänglich ist.

    • Privates Netzwerk: Wählen Sie diese Option aus, wenn Ihre Instanz in einem privaten Netzwerk gehostet wird. Konfigurieren Sie dann Folgendes:

      1. CA-Zertifikat: Klicken Sie auf „Durchsuchen“, um Ihr selbst signiertes Zertifikat hochzuladen.

      2. Wählen Sie unter Service Directory-Dienst den Standort für Ihren Dienst aus:

        • Im Projekt CURRENT_PROJECT
        • In einem anderen Projekt
        • Selbst eingeben
      3. Geben Sie die folgenden Informationen ein:

        • Projekt: Wenn Sie In einem anderen Projekt oder Selbst eingeben ausgewählt haben, geben Sie Ihre projekt-ID ein oder wählen Sie sie Google Cloud aus dem Drop-down-Menü aus.

        • Region: In diesem Feld ist die Region Ihrer Verbindung vorab ausgewählt. Die für Ihren Dienst angegebene Region muss mit der Region übereinstimmen, die mit Ihrer Verbindung verknüpft ist.

        • Namespace: Wählen Sie den Namespace Ihres Dienstes aus.

        • Dienst: Wählen Sie den Dienstnamen in Ihrem Namespace aus.

  10. Geben Sie im Bereich Persönliche Zugriffstokens die folgenden Informationen ein:

    • API-Zugriffstoken: Geben Sie das Token mit dem Zugriffsbereich api ein. Dieses Token wird zum Verbinden und Trennen von Repositories verwendet.

    • API-Zugriffstoken mit Leseberechtigung: Geben Sie das Token mit dem read_api Zugriffsbereich ein. Cloud Build-Trigger verwenden dieses Token, um auf Quellcode in Repositories zuzugreifen.

  11. Klicken Sie auf Verbinden.

    Nachdem Sie auf die Schaltfläche Verbinden geklickt haben, werden Ihre persönlichen Zugriffstokens sicher in Secret Manager gespeichert. Nach der Hostverbindung erstellt Cloud Build in Ihrem Namen auch ein Webhook-Secret. Sie können Secrets auf der Seite „Secret Manager“ ansehen und verwalten. Sie können Ihre Secrets auf der Secret Manager Seite ansehen und verwalten.

gcloud

Bevor Sie Ihren GitLab Enterprise Edition-Host mit Cloud Build verbinden, führen Sie die folgenden Schritte aus, um Ihre Anmeldedaten zu speichern:

  1. Speichern Sie Ihr Token in Secret Manager.

  2. Erstellen Sie mit dem folgenden Befehl ein Webhook-Secret in Secret Manager:

     cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-
    
  3. Wenn Sie Ihre Secrets in einem anderen Google Cloud Projekt speichern als dem, das Sie zum Erstellen einer Hostverbindung verwenden möchten, geben Sie den folgenden Befehl ein, um Ihrem Projekt Zugriff auf den Cloud Build-Dienst-Agent zu gewähren:

    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"
    

    Wobei:

    • PROJECT_ID ist Ihre Google Cloud projekt-ID.

Sie können jetzt Ihren GitLab Enterprise Edition-Host mit Cloud Build verbinden.

Gehen Sie folgendermaßen vor:

  1. Geben Sie den folgenden Befehl ein, um eine GitLab Enterprise Edition-Verbindung zu erstellen:

    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
    

    Wobei:

    • CONNECTION_NAME ist ein Name für Ihre Verbindung in Cloud Build.
    • HOST_URI ist die URI Ihrer GitLab Enterprise Edition-Instanz. Beispiel: https://my-gle-server.net.
    • PROJECT_ID ist Ihre Google Cloud projekt-ID.
    • REGION ist die Region für Ihre Verbindung.
    • API_TOKEN ist der Name Ihres Tokens mit dem Bereich api.
    • READ_TOKEN ist der Name Ihres Tokens mit dem Bereich read_api.
    • SECRET_VERSION ist die Version Ihres Secrets.
    • WEBHOOK_SECRET ist Ihr Webhook-Secret.

Sie haben jetzt eine GitLab Enterprise Edition-Verbindung erstellt.

Terraform

Sie können Ihren GitLab Enterprise Edition-Host mit Terraform mit Cloud Build verbinden. Weitere Informationen zu Terraform finden Sie unter Google Cloud.

Im folgenden Beispiel führt das Code-Snippet folgende Aktionen aus:

  • Konfiguriert den Terraform-Anbieter für Google Cloud Ressourcen
  • Erstellt ein Secret zum Speichern Ihres persönlichen Zugriffstokens für GitLab Enterprise Edition
  • Gewährt dem Cloud Build-Dienst-Agent die erforderlichen Berechtigungen für den Zugriff auf Secrets
  • Erstellt eine GitLab Enterprise Edition-Verbindung

    // Configure the Terraform Google provider
    terraform {
      required_providers {
        google = {}
      }
    }
    
    // Create secrets and grant permissions to the Cloud Build service agent
    resource "google_secret_manager_secret" "api-pat-secret" {
        project = "PROJECT_ID"
        secret_id = "GITLAB_PAT_API"
    
        replication {
            auto {}
         }
     }
    
     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 {
             auto {}
         }
    }
    
    resource "google_secret_manager_secret_version" "read-pat-secret-version" {
        secret = google_secret_manager_secret.read-pat-secret.id
        secret_data = "GITLAB_API_TOKEN"
    }
    
    resource "google_secret_manager_secret" "webhook-secret-secret" {
        project = "PROJECT_ID"
        secret_id = "WEBHOOK_SECRET"
    
        replication {
            auto {}
        }
    }
    
    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.api-pat-secret.project
      secret_id = google_secret_manager_secret.api-pat-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.read-pat-secret.project
      secret_id = google_secret_manager_secret.read-pat-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 {
            host_uri = "URI"
            authorizer_credential {
                user_token_secret_version = google_secret_manager_secret_version.api-pat-secret-version.id
            }
            read_authorizer_credential {
                 user_token_secret_version = google_secret_manager_secret_version.read-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
        ]
    }
    

Ersetzen Sie Folgendes:

  • PROJECT_ID: Ihre Google Cloud projekt-ID.
  • GITLAB_PAT_API: Ihr persönliches Zugriffstoken mit api-Zugriff.
  • GITLAB_API_TOKEN: Ihr persönliches Zugriffstoken.
  • GITLAB_PAT_READ: Ihr persönliches Zugriffstoken mit read_api-Zugriff.
  • WEBHOOK_SECRET: Der Secret-Name, der den Wert Ihres Webhook-Secrets enthält.
  • WEBHOOK_SECRET_VALUE: Der Wert Ihres Webhook-Secrets.
  • PROJECT_NUMBER: Ihre Google Cloud projekt Nummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud console oder durch Ausführen des folgenden Befehls:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
    
  • REGION: die Region für Ihre Verbindung.

  • CONNECTION_NAME: Ein Name für Ihre GitLab Enterprise Edition-Hostverbindung in Cloud Build.

  • URI: Die URI Ihrer Verbindung, z. B. https://my-gitlab-enterprise-server.net.

Sie haben jetzt eine GitLab Enterprise Edition-Verbindung erstellt.

Alte oder abgelaufene GitLab Enterprise Edition-Zugriffstokens rotieren

Rotieren Sie Ihre Zugriffstokens, damit die Cloud Build-Hostverbindung die Verbindung zu Ihrem GitLab Enterprise Edition-Repository aufrechterhalten kann. Wenn Ihr GitLab Enterprise Edition-Zugriffstoken abläuft, wird die Cloud Build-Hostverbindung von ihrem GitLab Enterprise Edition-Repository getrennt. In diesem Fall können Sie die Verbindung erst deaktivieren oder ein Repository verknüpfen, wenn Sie das abgelaufene Token rotieren. Außerdem werden unter folgenden Umständen Fehler angezeigt:

  • Auf der Seite Verbindungsdetails für Ihre Verbindung wird eine Fehlermeldung angezeigt: Connection is disconnected due to an invalid or expired access token.

  • Wenn Sie versuchen, ein Repository mit einer Verbindung zu verknüpfen, die ein abgelaufenes Token hat, wird die Meldung Ungültiges Zugriffstoken angezeigt. Wenn Sie auf Verbindung ansehen klicken, gelangen Sie zur Seite Verbindungsdetails für die Verbindung mit dem abgelaufenen Token.

Mit Cloud Build können Sie Zugriffstokens rotieren, indem Sie neue Tokenwerte eingeben und sie in der neuesten Secret-Version für diese Tokens in Secret Manager speichern. So rotieren Sie Ihre Zugriffstokens:

  1. Rotieren Sie jedes Zugriffstoken in GitLab Enterprise Edition:

    1. Rufen Sie das GitLab Enterprise Edition-Repository auf, das mit Ihrer Cloud Build-Hostverbindung verbunden ist.

    2. Folgen Sie der Anleitung in der GitLab-Dokumentation, um ein Zugriffstoken zu rotieren. Wenn Sie ein Token rotieren, erstellt GitLab Enterprise Edition ein neues Token mit neuen Anmeldedaten und macht die vorherige Version dieses Tokens ungültig. Ihr rotiertes Token hat dieselben Berechtigungen und denselben Bereich wie das ursprüngliche Token.

    3. Kopieren Sie die IDs Ihrer rotierten Tokens.

  2. Aktualisieren Sie Ihr Zugriffstoken in Cloud Build:

    1. Rufen Sie die Seite Verbindungsdetails für Ihre Verbindung auf.

    2. Wählen Sie Zugriffstokens aktualisieren aus.

    3. Geben Sie im Menü Tokenrotation Ihre neuen Tokens in die Felder API-Zugriffstoken und Zugriffstoken mit Leseberechtigung ein.

    4. Optional: Wenn Ihre Verbindung immer die neueste Version des Secrets für Ihre Tokens verwenden soll, wählen Sie Verbindung aktualisieren, damit immer die aktuelle Version verwendet wird aus. Wenn Ihre Verbindung eine bestimmte Secret-Versionsnummer verwendet, kann es hilfreich sein, diese Option nicht auszuwählen.

    5. Wählen Sie Aktualisieren aus, um die Änderungen zu speichern.

      Cloud Build speichert die neuen Zugriffstokens als neueste Version Ihres Secrets in Secret Manager.

Weitere Informationen finden Sie in der GitLab Enterprise Edition-Dokumentation unter Access token expiration.

Nächste Schritte