Verbindung zu einem GitLab Enterprise Edition-Host herstellen

Auf dieser Seite wird erläutert, wie Sie eine Verbindung zum Host der GitLab Enterprise Edition mit Cloud Build herstellen.

Hinweise

  • Cloud Build and Secret Manager APIs aktivieren.

    Aktivieren Sie die APIs

Hostanforderungen

  • Wenn Sie keine GitLab Enterprise Edition Server-Instanz installiert haben, finden Sie eine Anleitung in der Installationsanleitung der GitLab Enterprise Edition.

    Beachten Sie Folgendes, wenn Sie der Anleitung zum Installieren einer GitLab Enterprise Edition Server-Instanz folgen:

    • Sie müssen Ihren Host für die Verarbeitung des HTTPS-Protokolls konfigurieren. Hosts, die mit dem HTTP-Protokoll konfiguriert sind, werden nicht unterstützt.

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

Erforderliche IAM-Berechtigungen

Gewähren Sie Ihrem Nutzerkonto die Rolle „Cloud Build Connection Admin“ (roles/cloudbuild.connectionAdmin), um Ihren GitLab Enterprise Edition-Host zu verbinden.

Informationen zum Hinzufügen der erforderlichen Rollen zu Ihrem Nutzerkonto finden Sie unter Zugriff auf Cloud Build-Ressourcen konfigurieren. Weitere Informationen zu IAM-Rollen im Zusammenhang mit Cloud Build 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. Gehen Sie dazu so vor:

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

  2. Klicken Sie auf der Seite von GitLab Enterprise Edition 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 Personal Access Tokens (Persönliche Zugriffstokens) wird angezeigt.

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

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

Console

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

  1. Öffnen Sie in der 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 Abschnitt Verbindung konfigurieren die folgenden Informationen ein:

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

    2. Name: Geben Sie einen Namen für die Verbindung ein.

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

    1. GitLab-Anbieter: Wählen Sie Selbstverwaltete GitLab Enterprise Edition als Anbieter aus.

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

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

    4. Wählen Sie unter Verbindungstyp eine der folgenden Optionen aus:

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

      2. Privater Netzwerkzugriff: Wählen Sie diese Option aus, wenn die Instanz in einem privaten Netzwerk gehostet wird.

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

        • Im Projekt your-project
        • In einem anderen Projekt
        • Manuell eingeben
        1. Wenn Sie In einem anderen Projekt oder Manuell eingeben auswählen, geben Sie die folgenden Informationen ein:

          • Projekt: Geben Sie Ihre Google Cloud-Projekt-ID aus dem Drop-down-Menü ein oder wählen Sie sie aus.

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

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

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

  8. Geben Sie im Abschnitt Persönliche Zugriffstokens die folgenden Informationen ein:

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

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

  9. 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 auch ein Webhook-Secret in Ihrem Namen. Sie können Secrets auf der Seite „Secret Manager“ ansehen und verwalten. Sie können Ihre Secrets auf der Seite Secret Manager ansehen und verwalten.

Sie haben jetzt eine GitLab Enterprise Edition-Verbindung erstellt.

gcloud

Bevor Sie Ihren GitLab Enterprise Edition-Host mit Cloud Build verbinden, müssen Sie die folgenden Schritte zum Speichern Ihrer Anmeldedaten ausführen:

  1. Speichern Sie das Token in Secret Manager.

  2. Erstellen Sie ein Webhook-Secret in Secret Manager, indem Sie den folgenden Befehl ausführen:

     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 als dem speichern, das Sie zum Erstellen der 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.
    • CLOUD_BUILD_SERVICE_AGENT ist Ihr Cloud Build-Dienstkonto.

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 der Name Ihrer Verbindung.
    • HOST_URI ist der 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 des Tokens mit apiBereich.
    • READ_TOKEN ist der Name des Tokens mit read_apiBereich.
    • 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 mithilfe von Terraform mit Cloud Build verbinden.

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

  • Terraform Google-Anbieter konfigurieren
  • 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 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
        ]
    }
    

Wobei:

  • PROJECT_ID ist Ihre Google Cloud-Projekt-ID.
  • GITLAB_PAT_API ist Ihr persönliches Zugriffstoken mit api-Zugriff.
  • GITLAB_API_TOKEN ist Ihr persönliches Zugriffstoken.
  • GITLAB_PAT_READ ist Ihr persönliches Zugriffstoken mit read_api-Zugriff.
  • WEBHOOK_SECRET ist der Secret-Name, der den Wert Ihres Webhook-Secrets enthält.
  • WEBHOOK_SECRET_VALUE ist der Wert des Webhook-Secrets.
  • REGION ist die Region für Ihre Verbindung.
  • CONNECTION_NAME ist der Name Ihrer GitLab Enterprise Edition-Verbindung.
  • URI ist der URI der Verbindung. Beispiel: https://my-gitlab-enterprise-server.net. Sie haben jetzt eine GitLab Enterprise Edition-Verbindung erstellt.

Nächste Schritte