Verbindung zu einem Bitbucket Data Center-Host herstellen

Auf dieser Seite wird erläutert, wie Sie einen Bitbucket Data Center-Host mit Cloud Build verbinden. Wenn Sie eine Verbindung zu einem Bitbucket Data Center-Host herstellen, werden Ihre Bitbucket Data Center-Repositories in Cloud Build eingebunden. So können Sie Build-Trigger konfigurieren, um Repositories über Bitbucket Data Center zu erstellen und Repositories über Bitbucket Data Center in einem privaten Netzwerk zu erstellen.

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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Erforderliche IAM-Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Build Connection Admin (roles/cloudbuild.connectionAdmin) für Ihr Nutzerkonto zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Herstellen einer Verbindung zu Ihrem Bitbucket Data Center-Host benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Wenn Ihre Bitbucket Data Center-Instanz in einem privaten Netzwerk gehostet wird, finden Sie unter Repositories aus Bitbucket Data Center in einem privaten Netzwerk erstellen Informationen zu zusätzlichen IAM-Rollen, die zum Konfigurieren einer Hostverbindung erforderlich sind.

Persönliche Zugriffstokens erstellen

Bevor Sie eine Hostverbindung für Ihre Bitbucket Data Center-Instanz erstellen, müssen Sie persönliche Zugriffstokens in Bitbucket Data Center erstellen. Gehen Sie dazu so vor:

  1. Melden Sie sich in Ihrer Bitbucket Data Center-Instanz an.

  2. Folgen Sie der Anleitung, um HTTP-Zugriffstokens für Ihr Nutzerkonto zu erstellen.

    1. Erstellen Sie ein Zugriffstoken mit dem Bereich repository admin, das zum Verbinden und Trennen von Repositories verwendet werden soll.

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

  3. Speichern Sie Ihre Tokenwerte sicher. Sie verwenden sie, um eine Verbindung zu Ihrem Bitbucket Data Center-Repository herzustellen.

Verbindung zu einem Bitbucket Data Center-Host herstellen

Console

So verbinden Sie Ihren Bitbucket Data Center-Host mit Cloud Build:

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

    Zur Seite „Repositories“

  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 Bitbucket 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. Sie müssen eine Region angeben. Ihre Verbindung kann nicht global bestehen.

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

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

    1. Bitbucket-Host: Wählen Sie Bitbucket Data Center als Host aus.

    2. Host-URL: Geben Sie die URL Ihres Bitbucket Data Center-Hosts ein.

  8. Wählen Sie im Bereich Netzwerk eine der folgenden Optionen aus:

    1. Öffentliches Internet: Wählen Sie diese Option aus, wenn auf Ihre Instanz über das öffentliche Internet zugegriffen werden kann.

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

      1. CA-Zertifikat: Ihr selbst signiertes Zertifikat. Klicken Sie auf Durchsuchen, um das Zertifikat von Ihrem lokalen Computer aus zu öffnen.

        Ihr Zertifikat darf nicht größer als 10 KB sein und sollte das PEM-Format (.pem, .cer oder .crt) haben. Wenn Sie dieses Feld leer lassen, verwendet Cloud Build ein Zertifikat aus dem Standardsatz von Zertifikaten.

      2. Wählen Sie im Bereich Service Directory-Dienst den Standort Ihres Dienstes aus. Sie können die vorab ausgefüllte Projekt-ID übernehmen oder ein anderes Projekt angeben.

        1. Wählen Sie das Projekt Ihres Dienstes aus. Sie können das vorausgefüllte Projekt akzeptieren, In einem anderen Projekt auswählen, um zu suchen, oder Manuell eingeben auswählen.

          Wenn Sie Manuell eingeben auswählen, geben Sie die folgenden Informationen ein:

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

          • Region: In diesem Feld ist 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.

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

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

  9. Geben Sie im Bereich HTTP-Zugriffstokens die folgenden Informationen ein:

    1. Zugriffstoken mit Administratorberechtigungen: Geben Sie das Token mit dem Zugriffsbereich repository admin ein. Dieses Token wird zum Verbinden und Trennen von Repositories verwendet.

    2. Lesezugriffstoken: Geben Sie das Token mit dem Zugriffsbereich repository read ein. Cloud Build-Trigger verwenden dieses Token, um auf Quellcode in Repositories zuzugreifen.

  10. Klicken Sie auf Verbinden.

    Nachdem Sie auf die Schaltfläche Verbinden geklickt haben, werden Ihre persönlichen Zugriffstokens sicher in Secret Manager gespeichert. Nachdem Sie eine Verbindung zum Bitbucket Data Center-Host hergestellt haben, erstellt Cloud Build in Ihrem Namen ein Webhook-Secret. Sie können Ihre Secrets auf der Seite Secret Manager ansehen und verwalten.

gcloud

  1. Tokens in Secret Manager speichern

  2. Erstellen Sie ein Webhook-Secret in Secret Manager, indem Sie den folgenden Befehl ausführen. Dabei ist WEBHOOK_SECRET der Name, den Sie Ihrem Webhook-Secret geben möchten:

      cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-
    
  3. Wenn Sie Ihre Secrets in einem anderen Google Cloud Projekt als dem speichern, das Sie zum Erstellen einer Hostverbindung verwenden möchten, führen Sie den folgenden Befehl aus, 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 Bitbucket Data Center-Host mit Cloud Build verbinden.

  1. Führen Sie den folgenden Befehl aus, um eine Bitbucket Data Center-Verbindung zu erstellen:

    gcloud builds connections create bitbucket-data-center CONNECTION_NAME \
        --host-uri=HOST_URI \
        --project=PROJECT_ID \
        --region=REGION \
        --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_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
     ```
    
    Where:
    
    • CONNECTION_NAME ist ein Name für Ihre Bitbucket Data Center-Hostverbindung in Cloud Build.
    • HOST_URI ist der URI Ihrer Bitbucket Data Center-Instanz.
    • PROJECT_ID ist die Google Cloud Projekt-ID.
    • REGION ist die Region für Ihre Verbindung.
    • ADMIN_TOKEN ist der Name Ihres Tokens mit dem Bereich repository admin.
    • READ_TOKEN ist der Name Ihres Tokens mit dem Bereich repository read.
    • SECRET_VERSION ist die Version Ihres Secrets.
    • WEBHOOK_SECRET ist Ihr Webhook-Secret.

Terraform

Sie können Ihren Bitbucket Data Center-Host mit Cloud Build verbinden, indem Sie Terraform verwenden.

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

  • Konfiguriert den Terraform Google-Anbieter.
  • Erstellt ein Secret Manager-Secret zum Speichern der Bitbucket-Tokens.
  • Gewährt dem Cloud Build-Dienst-Agent die erforderlichen Berechtigungen für den Zugriff auf Secrets.
  • Erstellt eine Bitbucket Data Center-Verbindung.

    // Configure the Terraform Google provider
    terraform {
      required_providers {
        google = {}
      }
    }
    
    provider "google" {
      project = "PROJECT_ID"
      region = "REGION"
    }
    
    // Create secrets and grant permissions to the Cloud Build service agent
    resource "google_secret_manager_secret" "admin-token-secret" {
        project = "PROJECT_ID"
        secret_id = "ADMIN_TOKEN_NAME"
    
        replication {
            auto {}
        }
    }
    
    resource "google_secret_manager_secret_version" "admin-token-secret-version" {
        secret = google_secret_manager_secret.admin-token-secret.id
        secret_data = "ADMIN_TOKEN_VALUE"
    }
    
    resource "google_secret_manager_secret" "read-token-secret" {
        project = "PROJECT_ID"
        secret_id = "READ_TOKEN_NAME"
    
        replication {
            auto {}
        }
    }
    
    resource "google_secret_manager_secret_version" "read-token-secret-version" {
        secret = google_secret_manager_secret.read-token-secret.id
        secret_data = "READ_TOKEN_VALUE"
    }
    
    resource "google_secret_manager_secret" "webhook-secret-secret" {
        project = "PROJECT_ID"
        secret_id = "WEBHOOK_SECRET_NAME"
    
        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" "p4sa-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.admin-token-secret.project
      secret_id = google_secret_manager_secret.admin-token-secret.secret_id
      policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy-rpak" {
      project = google_secret_manager_secret.read-token-secret.project
      secret_id = google_secret_manager_secret.read-token-secret.secret_id
      policy_data = data.google_iam_policy.p4sa-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.p4sa-secretAccessor.policy_data
    }
    
    // Create the connection resource
    resource "google_cloudbuildv2_connection" "my-connection" {
        project = "PROJECT_ID"
        location = "REGION"
        name = "CONNECTION_NAME"
    
        bitbucket_data_center_config {
            host_uri = "BITBUCKET_URI"
            authorizer_credential {
                user_token_secret_version = google_secret_manager_secret_version.admin-token-secret-version.id
            }
            read_authorizer_credential {
                user_token_secret_version = google_secret_manager_secret_version.read-token-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 die Google Cloud Projekt-ID.
  • PROJECT_NUMBER ist die Nummer Ihres Google Cloud Projekts.
  • ADMIN_TOKEN_NAME ist der Name Ihres Tokens mit dem Bereich repository:admin.
  • ADMIN_TOKEN_VALUE ist der Wert Ihres ADMIN_TOKEN_NAME.
  • READ_TOKEN_NAME ist der Name Ihres Tokens mit dem Bereich repository:read.
  • READ_TOKEN_VALUE ist der Wert Ihres READ_TOKEN_NAME.
  • WEBHOOK_SECRET_NAME ist der Name Ihres Webhook-Secrets.
  • WEBHOOK_SECRET_VALUE ist der Wert Ihres WEBHOOK_SECRET_NAME.
  • REGION ist die Region für Ihre Verbindung.
  • CONNECTION_NAME ist ein Name für Ihre Bitbucket Data Center-Hostverbindung in Cloud Build.
  • BITBUCKET_URI ist die URI Ihrer Bitbucket Data Center-Instanz.

Alte oder abgelaufene Bitbucket Data Center-Zugriffstokens rotieren

Wenn Ihr Bitbucket Data Center-Zugriffstoken abläuft, wird die Verbindung Ihres Cloud Build-Hosts zu seinem Bitbucket Data Center-Repository getrennt. Daher werden in den folgenden Fällen Fehler angezeigt:

  • Wenn Sie versuchen, ein Bitbucket Data Center-Repository mit einer Cloud Build-Verbindung zu verknüpfen, wird die Meldung Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connection 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:

  1. So finden Sie die Secrets, die mit Ihrer Hostverbindung verknüpft sind:

    1. Führen Sie dazu diesen Befehl aus:

      gcloud builds connections describe CONNECTION_PATH --region=REGION
      

      Wobei:

      • CONNECTION_PATH ist der Pfad Ihrer Bitbucket Data Center-Hostverbindung in Cloud Build im Format projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME.
      • REGION ist die Region für Ihre Verbindung.
    2. Suchen Sie in der Ausgabe des Befehls nach den Werten der Felder Ihres Nutzer-Tokens. readAuthorizerCredential.userTokenSecretVersion ist der Secret Manager-Name des Read-Tokens und authorizerCredential.userTokenSecretVersion ist der Secret Manager-Name des Admin-Tokens. Diese Namen werden als Secrets in Secret Manager gespeichert.

  2. Rotieren Sie jedes Zugriffstoken in Bitbucket Data Center:

    1. Rufen Sie das Bitbucket Data Center-Repository auf, das mit Ihrer Cloud Build-Hostverbindung verbunden ist.

    2. Folgen Sie der Anleitung in der Bitbucket-Dokumentation, um ein Zugriffstoken zu rotieren. Wenn Sie ein Token rotieren, erstellt Bitbucket Data Center 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.

    3. Kopieren Sie die ID des rotierten Tokens.

  3. Erstellen Sie für jedes Token eine neue Secret-Version:

    1. Öffnen Sie in der Google Cloud Console die Seite „Secret Manager“:

      Zur Seite "Secret Manager"

    2. 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.

    3. Geben Sie im Fenster Neue Version hinzufügen die ID Ihres rotierten Tokens ein und klicken Sie dann auf Neue Version hinzufügen.

Weitere Informationen finden Sie in der Bitbucket Data Center-Dokumentation unter Zugriffstokens und Sicherheit in Bitbucket verbessern: Einführung des Ablaufs von Zugriffstokens.

Nächste Schritte