Verbindung zu einem Bitbucket-Rechenzentrumshost herstellen

Auf dieser Seite wird erläutert, wie Sie einen Bitbucket-Rechenzentrumshost mit Cloud Build verbinden.

Hinweise

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

  • Halten Sie Ihren Quellcode in einem Bitbucket-Rechenzentrum-Repository bereit.
  • Sie benötigen entweder eine Dockerfile oder eine Cloud Build-Konfigurationsdatei in Ihrem Bitbucket Data Center-Quell-Repository.
  • Wenn Sie noch keine Bitbucket Data Center-Instanz installiert haben, finden Sie unter Bitbucket Data Center installieren eine Anleitung.
  • Wenn Sie die gcloud-Befehle auf dieser Seite verwenden möchten, müssen Sie die Google Cloud CLI installieren.

Erforderliche IAM-Berechtigungen

  • Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Build Connection Admin (roles/cloudbuild.connectionAdmin) für das Nutzerkonto zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verbinden Ihres Bitbucket-Rechenzentrumshosts benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter „Zugriff verwalten“.

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

Verbindung zu einem Bitbucket-Rechenzentrumshost herstellen

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-Rechenzentrums-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-Administrator, das zum Verbinden und Trennen von Repositories verwendet wird.

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

Console

So verbinden Sie Ihren Bitbucket Data Center-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 Bitbucket als Quellanbieter aus.

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

    1. Region: Wählen Sie eine Region für die Verbindung aus. Sie müssen eine Region angeben. Ihre Verbindung darf nicht global vorhanden sein.

    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-Rechenzentrum als Host aus.

    2. Host-URL: Geben Sie die URL Ihres Bitbucket-Rechenzentrumshosts 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 auf Ihrem lokalen Computer 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 Abschnitt Service Directory-Dienst den Standort Ihres Dienstes aus. Sie können die vorab ausgefüllte Projekt-ID akzeptieren oder ein anderes Projekt angeben.

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

          Geben Sie in diesem Fall die folgenden Informationen ein:

          • Projekt: Geben Sie Ihre Google CloudProjekt-ID ein oder wählen Sie sie aus dem Drop-down-Menü 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 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 Abschnitt 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 eine Verbindung zum Bitbucket Data Center-Host hergestellt wurde, erstellt Cloud Build in Ihrem Namen ein Webhook-Secret. Sie können Ihre Secrets auf der Seite Secret Manager ansehen und verwalten.

gcloud

  1. Speichern Sie Ihre Tokens in Secret Manager.

  2. Erstellen Sie ein Webhook-Secret in Secret Manager. Führen Sie dazu den folgenden Befehl aus, wobei WEBHOOK_SECRET der Name ist, den Sie dem Webhook-Secret zuweisen möchten:

      cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-
    
  3. Wenn Sie Ihre Geheimnisse in einem anderen Google Cloud Projekt speichern als dem, mit dem Sie eine Hostverbindung erstellen möchten, führen Sie den folgenden Befehl aus, um Ihrem Projekt Zugriff auf den Cloud Build-Dienst-Agenten 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 mit der Verbindung Ihres Bitbucket-Rechenzentrumshosts mit Cloud Build fortfahren.

  1. Führen Sie den folgenden Befehl aus, um eine Bitbucket-Rechenzentrumsverbindung 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 der Name Ihrer Verbindung.
    • HOST_URI ist die URI Ihrer Bitbucket-Rechenzentrums-Instanz.
    • PROJECT_ID ist Ihre 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 mithilfe von Terraform mit Cloud Build verbinden.

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

    // 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 Ihre Google Cloud Projekt-ID.
  • PROJECT_NUMBER ist Ihre Google Cloud Projektnummer.
  • ADMIN_TOKEN_NAME ist der Name Ihres Tokens mit dem Bereich repository:admin.
  • ADMIN_TOKEN_VALUE ist der Wert Ihrer ADMIN_TOKEN_NAME.
  • READ_TOKEN_NAME ist der Name Ihres Tokens mit dem Bereich repository:read.
  • READ_TOKEN_VALUE ist der Wert Ihrer READ_TOKEN_NAME.
  • WEBHOOK_SECRET_NAME ist der Name Ihres Webhook-Secrets.
  • WEBHOOK_SECRET_VALUE ist der Wert Ihrer WEBHOOK_SECRET_NAME.
  • REGION ist die Region Ihrer Verbindung.
  • CONNECTION_NAME ist der Name Ihrer Verbindung.
  • BITBUCKET_URI ist die URI Ihrer Bitbucket-Rechenzentrums-Instanz.

Nächste Schritte