Verbindung zu einem Bitbucket Cloud-Host herstellen

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

Hinweise

  • Enable the Cloud Build, Secret Manager, and Compute Engine APIs.

    Enable the APIs

  • Der Quellcode muss sich in einem Bitbucket Cloud-Repository befinden.
  • Das Bitbucket Cloud-Quell-Repository muss entweder eine Dockerfile oder eine Cloud Build-Konfigurationsdatei enthalten.
  • Installieren Sie die Google Cloud CLI, um gcloud-Befehle verwenden zu können.

Erforderliche IAM-Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle „Cloud Build-Verbindungsadministrator“ (cloudbuild.connectionAdmin) für Ihr Nutzerkonto zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Herstellen einer Verbindung 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.

Bitbucket Cloud-Zugriffstokens erstellen

Erstellen Sie in Bitbucket Cloud die folgenden beiden Zugriffstokens:

  • Administratorzugriffstoken zum Verbinden und Trennen von Repositories.
  • Lesezugriffstoken: Damit Cloud Build auf Ihren Quellcode zugreifen kann.

So erstellst du diese Tokens:

  1. Melden Sie sich in Bitbucket Cloud an.

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

    Gewähren Sie die folgenden Berechtigungen:

    • Zugriffstoken mit Administratorberechtigungen:

      • Repositories: Lesen und Verwalten
      • Pull-Anfragen: Lesen
      • Webhooks: Lesen und Schreiben
    • Zugriffstoken mit Leseberechtigungen:

      • Repositories: Lesen
  3. Kopieren Sie Ihre Tokens, um sie in den folgenden Schritten zu verwenden.

Verbindung zu einem Bitbucket Cloud-Host herstellen

Console

So stellen Sie eine Verbindung zwischen Cloud Build und Ihrem Bitbucket Cloud-Host her:

  1. Öffnen Sie in der Google Cloud -Konsole 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 Bereich Hostdetails Bitbucket Cloud als Hosttyp aus.

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

    5. Zugriffstoken: Geben Sie das zuvor erstellte Administratorzugriffstoken ein.

    6. Lesezugriffstoken: Geben Sie das zuvor erstellte Lesezugriffstoken ein.

  7. Klicken Sie auf Verbinden.

    Die neue Verbindung wird auf der Seite Repositories angezeigt.

gcloud

  1. So speichern Sie Ihre Anmeldedaten:

    1. Speichern Sie Ihre Zugriffstokens in Secret Manager in IhremGoogle Cloud -Projekt. Führen Sie dazu die folgenden Befehle aus:

      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 Zugriffstoken mit Administratorberechtigungen.
      • ADMIN_SECRET_NAME ist der Name, den Sie dem Secret für das Administratorzugriffstoken in Secret Manager geben möchten.
      • READ_TOKEN ist Ihr Lesezugriffstoken.
      • READ_SECRET_NAME ist der Name, den Sie dem Secret für das Lesezugriffstoken in Secret Manager geben möchten.
    2. Erstellen Sie ein Webhook-Secret in Secret Manager. Führen Sie dazu den folgenden Befehl aus, wobei WEBHOOK_SECRET_NAME der Name ist, den Sie Ihrem Webhook-Secret geben möchten:

      echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
      
    3. Wenn sich Ihre Geheimnisse nicht alle im selben Projekt befinden, gewähren Sie dem Cloud Build-Dienst-Agenten Zugriff, indem Sie Folgendes ausführen:

      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 die Projekt-ID Ihres Google Cloud -Kontos.
      • ADMIN_SECRET_NAME ist der Name des Admin-Token-Secrets.
      • READ_SECRET_NAME ist der Name des Secrets für das Lesetoken.
      • WEBHOOK_SECRET_NAME ist der Name Ihres Webhook-Secrets.
  2. Verbinden Sie Cloud Build mit Ihrem Bitbucket Cloud-Host mit dem 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 Arbeitsbereichs-ID Ihres Bitbucket Cloud-Repositorys.
    • PROJECT_ID ist die Projekt-ID Ihres Google Cloud -Kontos.
    • REGION ist die Region für Ihre Hostverbindung.
    • ADMIN_SECRET_NAME ist der Name des Admin-Token-Secrets.
    • READ_SECRET_NAME ist der Name des Secrets für das Lesezugriffstoken.
    • WEBHOOK_SECRET_NAME ist der Name Ihres Webhook-Secrets.

Terraform

Sie können Ihren Bitbucket Cloud-Host mit Cloud Build über Terraform 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.
  • Erteilt dem Cloud Build-Dienst-Agent die erforderlichen Berechtigungen, um auf Geheimnisse zuzugreifen.
  • 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 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 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 die Projekt-ID Ihres Google Cloud -Kontos.
  • PROJECT_NUMBER ist die Projektnummer Ihres Google Cloud -Projekts.
  • ADMIN_TOKEN_NAME ist der Name deines Tokens mit Zugriff auf den Bereich webhook, repository, repository:admin und pullrequest.
  • 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 für Ihre Verbindung.
  • CONNECTION_NAME ist der Name Ihrer Verbindung.
  • WORKSPACE_ID ist die Workspace-ID Ihres Bitbucket Cloud-Repositorys.

Nächste Schritte