Verbindung zu einem Bitbucket Cloud-Host herstellen

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

Hinweise

  • Cloud Build, Secret Manager, and Compute Engine APIs aktivieren.

    Aktivieren Sie die APIs

  • Achten Sie darauf, dass sich der Quellcode in einem Bitbucket Cloud-Repository befindet
  • Achten Sie darauf, dass das Bitbucket Cloud-Quell-Repository entweder einen Dockerfile oder einen Cloud Build-Konfigurationsdatei.
  • Installieren Sie die Google Cloud CLI, um gcloud-Befehle zu verwenden.

Erforderliche IAM-Berechtigungen

Um die Berechtigungen zu erhalten, die Sie zum Herstellen einer Verbindung benötigen, bitten Sie Ihren Administrator, Ihnen Cloud Build-Verbindungsadministrator (cloudbuild.connectionAdmin) IAM-Rolle für Nutzerkonto. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

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

Bitbucket Cloud-Zugriffstokens erstellen

Erstellen Sie die folgenden zwei Zugriffstokens in Bitbucket Cloud:

  • Admin-Zugriffstoken – zum Verbinden und Trennen der Verbindung Repositories.
  • Lesezugriff-Token – damit Cloud Build auf die Quelle zugreifen kann Code.

So erstellen Sie diese Tokens:

  1. Melden Sie sich in Bitbucket Cloud an.

  2. Folgen Sie der Bitbucket Cloud-Anleitung, um Zugriffstokens erstellen, die mit Ihrem Repository verknüpft sind Projekt oder Arbeitsbereich erstellen.

    Erteilen Sie die folgenden Berechtigungen:

    • Admin-Zugriffstoken:

      • Repositories: Lesen und Administrator
      • Pull-Anfragen: Lesen
      • Webhooks: Read und Write
    • Zugriffstoken mit Lesezugriff:

      • Repositories: Lesen
  3. Kopieren Sie Ihre Tokens zur Verwendung in den folgenden Verfahren.

Verbindung zu einem Bitbucket Cloud-Host herstellen

Console

Verbinden Sie Cloud Build mit Ihrem Bitbucket Cloud-Host, indem Sie die folgenden Schritten:

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

    Zur Seite „Repositories“

    Die Seite Repositories wird angezeigt.

  2. Wählen Sie in der Projektauswahl Ihr Google Cloud-Projekt aus.

  3. Wählen Sie oben auf der Seite den Tab 2. Generation aus.

  4. Klicken Sie auf Hostverbindung erstellen, um einen neuen Host mit Cloud Build zu verbinden.

  5. Wählen Sie 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.

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

    3. Wählen Sie im Abschnitt Hostdetails als Hosttyp Bitbucket Cloud aus.

    4. Arbeitsbereich: Geben Sie die Arbeitsbereich-ID für Ihr Bitbucket Cloud-Repository ein.

    5. Zugriffstoken: Geben Sie das zuvor erstellte Administrator-Zugriffstoken ein.

    6. Lesezugriffstoken: Geben Sie Ihr zuvor erstelltes Lesezugriff-Token ein.

  7. Klicken Sie auf Verbinden.

    Die neue Verbindung wird auf der Seite Repositories angezeigt.

gcloud

  1. So speichern Sie Ihre Anmeldedaten:

    1. Zugriffstokens in Secret Manager in Ihrer Google Cloud speichern indem Sie die folgenden Befehle ausführen:

      echo -n ADMIN_TOKEN | gcloud secrets create ADMIN_SECRET_NAME --data-file=-
      
      echo -n READ_TOKEN | gcloud secrets create READ_SECRET_NAME --data-file=-
      

      Wobei:

      • ADMIN_TOKEN ist Ihr Administrator-Zugriffstoken.
      • ADMIN_SECRET_NAME ist der Name, den Sie vergeben möchten Ihr Administrator-Zugriffstoken-Secret in Secret Manager.
      • READ_TOKEN ist Ihr Lesezugriff-Token.
      • READ_SECRET_NAME ist der Name, den Sie Ihrem Token-Secret in Secret Manager mit Lesezugriff.
    2. Webhook-Secret in Secret Manager erstellen indem Sie den folgenden Befehl ausführen. Dabei ist WEBHOOK_SECRET_NAME der Name, den Sie dem Webhook-Secret geben möchten:

      echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
      
    3. Wenn sich nicht alle Secrets im selben Projekt befinden, gewähren Sie Zugriff auf das Cloud Build-Dienstkonto durch Ausführen des folgenden Befehls:

      PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
      CLOUD_BUILD_SERVICE_ACCOUNT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
      gcloud secrets add-iam-policy-binding ADMIN_SECRET_NAME \
          --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \
          --role="roles/secretmanager.secretAccessor"
      
      gcloud secrets add-iam-policy-binding READ_SECRET_NAME \
          --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \
          --role="roles/secretmanager.secretAccessor"
      
      gcloud secrets add-iam-policy-binding WEBHOOK_SECRET_NAME \
          --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \
          --role="roles/secretmanager.secretAccessor"
      

      Wobei:

      • PROJECT_ID ist Ihre Google Cloud-Projekt-ID.
      • ADMIN_SECRET_NAME ist der Name Ihres Admin-Token-Secret.
      • READ_SECRET_NAME ist der Name Ihres Token-Geheimnis lesen.
      • WEBHOOK_SECRET_NAME ist der Name Ihres Webhook-Secret.
  2. Verbinden Sie Cloud Build über den folgenden Befehl:

    gcloud builds connections create bitbucket-cloud CONNECTION_NAME \
        --workspace=WORKSPACE_ID \
        --project=PROJECT_ID \
        --region=REGION \
        --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_SECRET_NAME/versions/latest \
        --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_SECRET_NAME/versions/latest \
        --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET_NAME/versions/1
    

    Wobei:

    • CONNECTION_NAME ist der Name, den Sie der Verbindung zu Ihrem Bitbucket Cloud-Host geben möchten.
    • WORKSPACE_ID ist die Arbeitsbereich-ID für Ihr Bitbucket Cloud-Repository.
    • PROJECT_ID ist Ihre Google Cloud-Projekt-ID.
    • REGION ist die Region für Ihre Hostverbindung.
    • ADMIN_SECRET_NAME ist der Name Ihres Administrator-Token-Secrets.
    • READ_SECRET_NAME ist der Name Ihres Token-Secrets mit Lesezugriff.
    • WEBHOOK_SECRET_NAME ist der Name Ihres Webhook-Secrets.

Terraform

Sie können Ihren Bitbucket Cloud-Host mit Cloud Build verbinden: Terraform

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

  • Konfiguriert den Terraform-Anbieter von Google.
  • Erstellt ein Secret Manager-Secret zum Speichern der Bitbucket-Tokens.
  • Gewährt erforderliche Berechtigungen für Cloud Build Dienstkonto pro Produkt und Projekt (P4SA) für den Zugriff auf Secrets.
  • Erstellt eine Bitbucket-Cloud-Verbindung.

    // Configure the Terraform Google provider
    terraform {
      required_providers {
        google = {}
      }
    }
    
    provider "google" {
      project = "PROJECT_ID"
      region = "REGION"
    }
    
    // Create secrets and grant permissions to the P4SA
    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 and add the repository resource
    resource "google_cloudbuildv2_connection" "my-connection" {
        project = "PROJECT_ID"
        location = "REGION"
        name = "CONNECTION_NAME"
    
        bitbucket_cloud_config {
            workspace = "WORKSPACE_ID"
            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 Zugriff auf die Bereiche webhook, repository, repository:admin und pullrequest.
  • ADMIN_TOKEN_VALUE ist der Wert Ihres ADMIN_TOKEN_NAME.
  • READ_TOKEN_NAME ist der Name Ihres Tokens mit repository:read Bereich.
  • 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 der Name Ihrer Verbindung.
  • WORKSPACE_ID ist die Arbeitsbereich-ID für Ihren Bitbucket. Cloud Repository.

Nächste Schritte