Auf dieser Seite wird beschrieben, wie Sie eine Verbindung zwischen einem GitLab Enterprise Edition-Host und Cloud Build herstellen.
Hinweise
-
Enable the Cloud Build and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Anforderungen an den Host
Wenn Sie keine GitLab Enterprise Edition Server-Instanz installiert haben, finden Sie eine Anleitung in der Installationsanleitung von GitLab Enterprise Edition.
Beachten Sie bei der Installation einer GitLab Enterprise Edition Server-Instanz Folgendes:
Sie müssen Ihren Host so konfigurieren, dass er das
HTTPS-Protokoll verarbeitet. Hosts, die mit dem ProtokollHTTPkonfiguriert sind, werden nicht unterstützt.Sie müssen Ihren Host mit derselben URL konfigurieren, die verwendet wird, um Ihren Host über Google Cloudzu erreichen. 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 dem 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.
Mit einem GitLab Enterprise Edition-Host verbinden
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:
Melden Sie sich bei Ihrer GitLab Enterprise Edition-Instanz an.
Klicken Sie auf der Seite „GitLab Enterprise Edition“ für Ihre Instanz rechts oben auf Ihren Avatar.
Klicken Sie auf Profil bearbeiten.
Wählen Sie in der linken Seitenleiste Zugriffstokens aus.
Die Seite Personal Access Tokens (Persönliche Zugriffstokens) wird angezeigt.
Erstellen Sie ein Zugriffstoken mit dem Bereich
api, das zum Verbinden und Trennen von Repositories verwendet werden kann.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:
Öffnen Sie in der Google Cloud Console die Seite Repositories.
Die Seite Repositories wird angezeigt.
Wählen Sie oben auf der Seite den Tab 2. Generation aus.
Wählen Sie in der Projektauswahl in der oberen Leiste Ihr Google Cloud -Projekt aus.
Klicken Sie auf Hostverbindung erstellen, um einen neuen Host mit Cloud Build zu verbinden.
Wählen Sie im linken Bereich GitLab als Quellanbieter aus.
Geben Sie im Abschnitt Verbindung konfigurieren die folgenden Informationen ein:
Region: Wählen Sie eine Region für Ihre Verbindung aus.
Name: Geben Sie einen Namen für die Verbindung ein.
Wählen Sie im Abschnitt Hostdetails die folgenden Informationen aus oder geben Sie sie ein:
GitLab-Anbieter: Wählen Sie Selbstverwaltete GitLab Enterprise Edition als Anbieter aus.
Host-URL: Geben Sie die Host-URL für Ihre Verbindung ein. Beispiel:
https://my-gle-server.net.CA-Zertifikat: Klicken Sie auf „Durchsuchen“, um Ihr selbst signiertes Zertifikat hochzuladen.
Wählen Sie 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.
Zugriff auf privates Netzwerk: Wählen Sie diese Option aus, wenn Ihre Instanz in einem privaten Netzwerk gehostet wird.
Wählen Sie unter Service Directory-Dienst den Standort für Ihren Dienst aus:
- In Projekt
your-project - In einem anderen Projekt
- Manuell eingeben
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 ein oder wählen Sie sie im Drop-down-Menü aus.
Region: In diesem Feld wird die Region Ihrer Verbindung vorausgewä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.
- In Projekt
Geben Sie im Bereich Persönliche Zugriffstokens die folgenden Informationen ein:
API-Zugriffstoken: Geben Sie das Token mit dem Zugriffsbereich
apiein. Dieses Token wird zum Verbinden und Trennen von Repositories verwendet.API-Zugriffstoken mit Leseberechtigung: Geben Sie das Token mit Zugriff auf den Bereich
read_apiein. Cloud Build-Trigger verwenden dieses Token, um auf Quellcode in Repositories zuzugreifen.
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. Auf der Seite „Secret Manager“ können Sie Secrets ansehen und verwalten. Sie können Ihre Secrets auf der Seite Secret Manager ansehen und verwalten.
Sie haben jetzt erfolgreich eine GitLab Enterprise Edition-Verbindung erstellt.
gcloud
Bevor Sie Ihren GitLab Enterprise Edition-Host mit Cloud Build verbinden, führen Sie die folgenden Schritte aus, um Ihre Anmeldedaten zu speichern:
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=-Wenn Sie Ihre Secrets in einem anderen Google Cloud -Projekt als dem speichern, 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 die Google Cloud -Projekt-ID.
Sie können jetzt Ihren GitLab Enterprise Edition-Host mit Cloud Build verbinden.
Gehen Sie folgendermaßen vor:
Geben Sie den folgenden Befehl ein, um eine Verbindung zu GitLab Enterprise Edition herzustellen:
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_VERSIONWobei:
- CONNECTION_NAME ist ein Name für Ihre Verbindung in Cloud Build.
- HOST_URI ist der URI Ihrer GitLab Enterprise Edition-Instanz. Beispiel:
https://my-gle-server.net. - PROJECT_ID ist die Google Cloud -Projekt-ID.
- REGION ist die Region für Ihre Verbindung.
- API_TOKEN ist der Name Ihres Tokens mit dem
api-Bereich. - READ_TOKEN ist der Name Ihres Tokens mit dem
read_api-Bereich. - SECRET_VERSION ist die Version Ihres Secrets.
- WEBHOOK_SECRET ist Ihr Webhook-Secret.
Sie haben jetzt erfolgreich eine GitLab Enterprise Edition-Verbindung erstellt.
Terraform
Sie können Ihren GitLab Enterprise Edition-Host mit Cloud Build verbinden, indem Sie Terraform verwenden. Weitere Informationen zu Terraform in Google Cloud
Im folgenden Beispiel führt das Code-Snippet Folgendes aus:
- Konfiguriert den Terraform-Anbieter für Google Cloud-Ressourcen
- Erstellt ein Secret zum Speichern Ihres persönlichen Zugriffstokens für GitLab Enterprise Edition
- Erteilt 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: Projekt-ID in Google Cloud .GITLAB_PAT_API: Ihr persönliches Zugriffstoken mitapi-Zugriff.GITLAB_API_TOKEN: Ihr persönliches Zugriffstoken.GITLAB_PAT_READ: Ihr persönliches Zugriffstoken mitread_api-Zugriff.WEBHOOK_SECRET: Der Secret-Name, der Ihren Webhook-Secret-Wert enthält.WEBHOOK_SECRET_VALUE: Der Wert Ihres Webhook-Secrets.PROJECT_NUMBER: Ihre Google Cloud Projektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud -Konsole 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: Der URI Ihrer Verbindung, z. B.https://my-gitlab-enterprise-server.net.
Sie haben jetzt erfolgreich eine GitLab Enterprise Edition-Verbindung erstellt.
Alte oder abgelaufene GitLab Enterprise Edition-Zugriffstokens rotieren
Wenn Ihr GitLab Enterprise Edition-Zugriffstoken abläuft, wird die Verbindung Ihres Cloud Build-Hosts zum zugehörigen GitLab Enterprise Edition-Repository getrennt. Daher werden in den folgenden Fällen Fehler angezeigt:
Wenn Sie versuchen, ein GitLab Enterprise Edition-Repository mit einer Cloud Build-Verbindung zu verknüpfen, wird eine
Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connection-Meldung angezeigt.Wenn Sie auf der Seite Trigger auf Ausführen klicken, wird die Seite Trigger ausführen geöffnet und eine
Failed to list branches. You can still enter one manually-Meldung angezeigt.
So rotieren Sie ein altes oder abgelaufenes Token für Ihre Verbindung:
So finden Sie die Secrets, die mit Ihrer Hostverbindung verknüpft sind:
Führen Sie dazu diesen Befehl aus:
gcloud builds connections describe CONNECTION_PATH --region=REGIONWobei:
- CONNECTION_PATH ist der Pfad Ihrer GitLab Enterprise Edition-Hostverbindung in Cloud Build im Format
projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME. - REGION ist die Region für Ihre Verbindung.
- CONNECTION_PATH ist der Pfad Ihrer GitLab Enterprise Edition-Hostverbindung in Cloud Build im Format
Suchen Sie in der Ausgabe des Befehls nach den Werten der Felder Ihres Nutzer-Tokens.
readAuthorizerCredential.userTokenSecretVersionist der Secret Manager-Name desread_api-Tokens undauthorizerCredential.userTokenSecretVersionist der Secret Manager-Name desapi-Tokens. Diese Namen werden als Secrets in Secret Manager gespeichert.
Rotieren Sie jedes Zugriffstoken in GitLab Enterprise Edition:
Rufen Sie das GitLab Enterprise Edition-Repository auf, das mit Ihrer Cloud Build-Hostverbindung verbunden ist.
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. Das rotierte Token hat dieselben Berechtigungen und denselben Bereich wie das ursprüngliche Token.
Kopieren Sie die ID des rotierten Tokens.
Erstellen Sie für jedes Token eine neue Secret-Version:
Öffnen Sie in der Google Cloud Console die Seite „Secret Manager“:
Suchen Sie für jedes rotierte Token den Secret-Namen, den Sie in Schritt 1 ermittelt haben, klicken Sie auf Aktionen und dann auf Neue Version hinzufügen.
Geben Sie im Fenster Neue Version hinzufügen die ID Ihres rotierten Tokens ein und klicken Sie dann auf Neue Version hinzufügen.
Nächste Schritte
- Repository der GitLab Enterprise Edition verbinden
- Hier erfahren Sie, wie Sie Ihre Arbeitslasten in Google Cloud erstellen und bereitstellen können, indem Sie von Google verwaltete CI/CD-Komponenten in Ihrer GitLab-Pipeline verwenden. Weitere Informationen finden Sie unter GitLab auf Google Cloud.