Verbindung zu einem Bitbucket Data Center-Host herstellen

Auf dieser Seite wird erläutert, wie Sie eine Verbindung Bitbucket-Rechenzentrum zu Cloud Build.

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 Informationen zum Gewähren 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 Data Center-Host 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 Ihrem Bitbucket Data Center an. Instanz.

  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 für wie Repositories verbunden oder getrennt werden.

    2. Erstellen Sie ein Zugriffstoken mit dem Lesebereich des Repositorys, um sicherzustellen, Cloud Build-Repositories können auf Quellcode in Repositories zugreifen.

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“

    Sie sehen die 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 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 Data Center als Host aus.

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

  8. Wählen Sie im Abschnitt 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 die Option den Standort Ihrer Dienstleistung. 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 die wählen Sie In einem anderen Projekt aus, oder Manuell eingeben auswählen.

          Geben Sie in diesem Fall die folgenden Informationen ein:

          • Project (Projekt): Geben Sie Ihr Google Cloud-Projekt ein oder wählen Sie es aus. Projekt-ID 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. Admin access token (Administratorzugriffstoken): Geben Sie das Token mit dem Repository-Administrator ein. Zugriffsbereich. Dieses Token wird zum Herstellen und Trennen der Verbindung verwendet Repositories.

    2. Zugriffstoken mit Leseberechtigungen: Geben Sie das Token mit dem Zugriffsbereich Repository lesen 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. Nach dem Verbinden mit dem Bitbucket Data Center-Host, Cloud Build erstellt einen Webhook in Ihrem Namen geheim halten. Sie können Ihre Secrets auf der Secret Manager Seite.

gcloud

  1. Speichern Sie Ihre Tokens in Secret Manager.

  2. Webhook-Secret in Secret Manager erstellen indem Sie den folgenden Befehl ausführen, wobei WEBHOOK_SECRET ist der Name, den Sie Ihrem Webhook-Secret:

      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 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-Dienstagenten 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 mit der Verbindung Ihres Bitbucket-Rechenzentrumshosts mit Cloud Build fortfahren.

  1. Führen Sie den folgenden Befehl aus, um eine Verbindung zum Bitbucket Data Center 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 der Verbindung.
    • HOST_URI ist der URI Ihrer Bitbucket Data Center-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-Administrator.
    • READ_TOKEN ist der Name Ihres Tokens mit dem Bereich Lesen des Repositories.
    • 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 mithilfe von Terraform.

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 erforderliche Berechtigungen für Cloud Build Dienst-Agent auf Secrets zugreifen.
  • 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 Ihr Google Cloud-Projekt Nummer.
  • 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 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 Ihrer Verbindung.
  • CONNECTION_NAME ist der Name Ihrer Verbindung.
  • BITBUCKET_URI ist der URI Ihrer Bitbucket-Daten. Center-Instanz.

Nächste Schritte