Conéctate a un host de Bitbucket Cloud

En esta página, se explica cómo conectarse a un host de Bitbucket Cloud en Cloud Build.

Antes de comenzar

  • Habilita las API de Cloud Build, Secret Manager, and Compute Engine.

    Habilita las API

Permisos de IAM obligatorios

Para obtener los permisos que necesitas para conectarte, solicita a tu administrador que te otorgue el Administrador de conexiones de Cloud Build (cloudbuild.connectionAdmin) Rol de IAM en la cuenta de usuario Para obtener más información sobre cómo otorgar roles, consulta Cómo administrar el acceso.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Crea tokens de acceso de Bitbucket Cloud

Crea los dos tokens de acceso siguientes en Bitbucket Cloud:

  • Token de acceso de administrador: para conectarse y desconectarse de Cloud Storage.
  • Token de acceso de lectura para permitir que Cloud Build acceda al código fuente código.

Para crear estos tokens, sigue estos pasos:

  1. Accede a Bitbucket Cloud.

  2. Sigue las instrucciones de Bitbucket Cloud para crear tokens de acceso vinculados a tu repositorio project o workspace.

    Otorga los siguientes permisos:

    • Token de acceso de administrador:

      • Repositorios: Lectura y Administrador
      • Solicitudes de extracción: lectura
      • Webhooks: Lectura y Escritura
    • Token de acceso de lectura:

      • Repositorios: Lectura
  3. Copia tus tokens para usarlos en los siguientes procedimientos.

Conéctate a un host de Bitbucket Cloud

Console

Conecta Cloud Build a tu host de Bitbucket Cloud los siguientes pasos:

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página repositorios

    Verás la página Repositories.

  2. En el selector de proyectos, elige tu proyecto de Google Cloud.

  3. En la parte superior de la página, selecciona la pestaña 2nd gen.

  4. Haz clic en Crear conexión de host para conectar un host nuevo a Cloud Build.

  5. Selecciona Bitbucket como tu proveedor de origen.

  6. En la sección Configurar conexión, ingresa la siguiente información:

    1. Región: Selecciona una región para tu conexión.

    2. Nombre: Ingresa un nombre para tu conexión.

    3. En la sección Detalles del host, selecciona Bitbucket Cloud como tu tipo de host.

    4. Lugar de trabajo: Ingresa el ID del lugar de trabajo de tu repositorio de Bitbucket Cloud.

    5. Token de acceso: Ingresa el token de acceso de administrador creado anteriormente.

    6. Token de acceso de lectura: Ingresa el token de acceso de lectura creado anteriormente.

  7. Haz clic en Conectar.

    La conexión nueva aparecerá en la página Repositories.

gcloud

  1. Completa los siguientes pasos para almacenar tus credenciales:

    1. Almacena tus tokens de acceso en Secret Manager, en tu cuenta de Google Cloud de un proyecto ejecutando los siguientes comandos:

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

      Aquí:

      • ADMIN_TOKEN es tu token de acceso de administrador.
      • ADMIN_SECRET_NAME es el nombre que quieres darle a el Secret de token de acceso de administrador en Secret Manager.
      • READ_TOKEN es tu token de acceso de lectura.
      • READ_SECRET_NAME es el nombre que quieres asignarle a tu Secret del token de acceso de lectura en Secret Manager.
    2. Crea un secreto de webhook en Secret Manager Ejecuta el siguiente comando, en el que WEBHOOK_SECRET_NAME es el nombre que quieres asignar al secreto de tu webhook:

      echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
      
    3. Si no todos tus Secrets están en el mismo proyecto, otorga acceso al Ejecuta los siguientes comandos para ejecutar la cuenta de servicio de Cloud Build:

      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"
      

      Aquí:

      • PROJECT_ID es el ID del proyecto de Google Cloud.
      • ADMIN_SECRET_NAME es el nombre de tu Secret del token de administrador.
      • READ_SECRET_NAME es el nombre de tu de token de lectura.
      • WEBHOOK_SECRET_NAME es el nombre de tu el secreto de webhook.
  2. Conecta Cloud Build a tu host de Bitbucket Cloud con el siguiente comando:

    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
    

    Aquí:

    • CONNECTION_NAME es el nombre que deseas asignar a la conexión a tu host de Bitbucket Cloud.
    • WORKSPACE_ID es el ID del lugar de trabajo para tu repositorio de Bitbucket Cloud.
    • PROJECT_ID es el ID del proyecto de Google Cloud.
    • REGION es la región de tu conexión de host.
    • ADMIN_SECRET_NAME es el nombre de tu secreto del token de administrador.
    • READ_SECRET_NAME es el nombre de tu secreto del token de acceso de lectura.
    • WEBHOOK_SECRET_NAME es el nombre del secreto de tu webhook.

Terraform

Puedes conectar tu host de Bitbucket Cloud a Cloud Build con en Terraform.

En el siguiente ejemplo, el fragmento de código hace lo siguiente:

  • Configura el proveedor de Google para Terraform.
  • Crea un secreto de Secret Manager para almacenar los tokens de Bitbucket.
  • Otorga los permisos necesarios a Cloud Build cuenta de servicio por proyecto (P4SA) por producto para acceder a los secretos.
  • Crea una conexión de Bitbucket Cloud.

    // 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
        ]
    }
    

Aquí:

  • PROJECT_ID es el ID del proyecto de Google Cloud.
  • PROJECT_NUMBER es tu proyecto de Google Cloud. de la fila.
  • ADMIN_TOKEN_NAME es el nombre de tu token con Acceso al permiso webhook, repository, repository:admin y pullrequest.
  • ADMIN_TOKEN_VALUE es el valor de tu ADMIN_TOKEN_NAME
  • READ_TOKEN_NAME es el nombre de tu token con repository:read permiso.
  • READ_TOKEN_VALUE es el valor de tu READ_TOKEN_NAME
  • WEBHOOK_SECRET_NAME es el nombre del secreto de tu webhook.
  • WEBHOOK_SECRET_VALUE es el valor de tu WEBHOOK_SECRET_NAME
  • REGION es la región de tu conexión.
  • CONNECTION_NAME es el nombre de la conexión.
  • WORKSPACE_ID es el ID del lugar de trabajo de tu Bitbucket. de Google Cloud.

¿Qué sigue?