Conectarse a un host de Bitbucket Data Center

En esta página se explica cómo conectar un host de Bitbucket Data Center a Cloud Build. Al conectarse a un host de Bitbucket Data Center, se integran sus repositorios de Bitbucket Data Center con Cloud Build. De esta forma, puedes configurar activadores de compilación para compilar repositorios de Bitbucket Data Center y compilar repositorios de Bitbucket Data Center en una red privada.

Antes de empezar

  • Enable the Cloud Build and Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Permisos de gestión de identidades y accesos necesarios

Para obtener los permisos que necesitas para conectarte a tu host de Bitbucket Data Center, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de conexiones de Cloud Build (roles/cloudbuild.connectionAdmin) en tu cuenta de usuario. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Si tu instancia de Bitbucket Data Center está alojada en una red privada, consulta el artículo Crear repositorios de Bitbucket Data Center en una red privada para obtener información sobre los roles de gestión de identidades y accesos adicionales que se necesitan para configurar una conexión de host.

Crear tokens de acceso personal

Antes de crear una conexión de host para tu instancia de Bitbucket Data Center, crea tokens de acceso personales en Bitbucket Data Center siguiendo estos pasos:

  1. Inicia sesión en tu instancia de Bitbucket Data Center.

  2. Sigue las instrucciones para crear tokens de acceso HTTP para tu cuenta de usuario.

    1. Crea un token de acceso con el permiso administrador de repositorios para conectar y desconectar repositorios.

    2. Crea un token de acceso con el ámbito repository read para asegurarte de que los repositorios de Cloud Build puedan acceder al código fuente de los repositorios.

  3. Guarda los valores de token de forma segura. Las usarás para conectarte a tu repositorio de Bitbucket Data Center.

Conectarse a un host de Bitbucket Data Center

Consola

Para conectar tu host de Bitbucket Data Center a Cloud Build, sigue estos pasos:

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

    Abre la página Repositorios.

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

  3. En el selector de proyectos de la barra superior, selecciona tu Google Cloud proyecto.

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

  5. En el panel de la izquierda, selecciona Bitbucket como proveedor de origen.

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

    1. Región: selecciona una región para tu conexión. Debes especificar una región. Tu conexión no puede ser global.

    2. Nombre: introduce un nombre para la conexión.

  7. En la sección Detalles del host, selecciona o introduce la siguiente información:

    1. Host de Bitbucket: selecciona Bitbucket Data Center como host.

    2. URL del host: introduce la URL de tu host de Bitbucket Data Center.

  8. En la sección Redes, seleccione una de las siguientes opciones:

    1. Internet público: selecciona esta opción si se puede acceder a tu instancia a través de Internet público.

    2. Red privada: selecciona esta opción si tu instancia está alojada en una red privada.

      1. Certificado de AC: tu certificado autofirmado. Haz clic en Buscar para abrir el certificado desde tu equipo local.

        El tamaño del certificado no debe superar los 10 KB y debe estar en formato PEM (.pem, .cer o .crt). Si deja este campo en blanco, Cloud Build usará un certificado del conjunto de certificados predeterminado.

      2. En la sección Servicio Service Directory, selecciona la ubicación de tu servicio. Puedes aceptar el ID de proyecto rellenado automáticamente o especificar otro.

        1. Selecciona el proyecto de tu servicio. Puedes aceptar el proyecto que se ha rellenado automáticamente, elegir En otro proyecto para buscarlo o seleccionar Introducir manualmente.

          Si elige Introducir manualmente, introduzca la siguiente información:

          • Proyecto: introduce o selecciona tu Google Cloud ID de proyecto en el menú desplegable.

          • Región: este campo selecciona previamente la región de tu conexión. La región especificada para tu servicio debe coincidir con la región asociada a tu conexión.

        2. Espacio de nombres: selecciona el espacio de nombres de tu servicio.

        3. Servicio: selecciona el nombre del servicio en tu espacio de nombres.

  9. En la sección Tokens de acceso HTTP, introduce la siguiente información:

    1. Token de acceso de administrador: introduce el token con el acceso al ámbito administrador del repositorio. Este token se usa para conectar y desconectar repositorios.

    2. Token de acceso de lectura: introduce el token con el ámbito repository read access. Los activadores de Cloud Build usan este token para acceder al código fuente de los repositorios.

  10. Haz clic en Conectar.

    Después de hacer clic en el botón Conectar, tus tokens de acceso personales se almacenarán de forma segura en Secret Manager. Después de conectarse al host de Bitbucket Data Center, Cloud Build crea un secreto de webhook en su nombre. Puedes ver y gestionar tus secretos en la página Secret Manager.

gcloud

  1. Almacena tus tokens en Secret Manager.

  2. Crea un secreto de webhook en Secret Manager ejecutando el siguiente comando, donde WEBHOOK_SECRET es el nombre que quieres dar a tu secreto de webhook:

      cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-
    
  3. Si almacenas tus secretos en un proyecto de Google Cloud distinto del que tienes previsto usar para crear una conexión de host, ejecuta el siguiente comando para conceder acceso a tu proyecto al agente de servicio de Cloud Build:

    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"
    

    Donde:

    • PROJECT_ID es el ID de tu proyecto Google Cloud .

Ahora puede conectar su host de Bitbucket Data Center a Cloud Build.

  1. Ejecuta el siguiente comando para crear una conexión de Bitbucket Data Center:

    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 es el nombre de tu conexión de host de Bitbucket Data Center en Cloud Build.
    • HOST_URI es el URI de tu instancia de Bitbucket Data Center.
    • PROJECT_ID es el Google Cloud ID de tu proyecto.
    • REGION es la región de tu conexión.
    • ADMIN_TOKEN es el nombre de tu token con el ámbito administrador del repositorio.
    • READ_TOKEN es el nombre de tu token con el ámbito lectura de repositorio.
    • SECRET_VERSION es la versión de tu secreto.
    • Tu secreto de webhook es WEBHOOK_SECRET.

Terraform

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

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

  • Configura el proveedor de Google de Terraform.
  • Crea un secreto de Secret Manager para almacenar los tokens de Bitbucket.
  • Concede los permisos necesarios al agente de servicio de Cloud Build para acceder a los secretos.
  • Crea una conexión de Bitbucket Data Center.

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

Donde:

  • PROJECT_ID es el Google Cloud ID de tu proyecto.
  • PROJECT_NUMBER es el número de tu proyecto Google Cloud .
  • ADMIN_TOKEN_NAME es el nombre de tu token con el permiso repository:admin.
  • ADMIN_TOKEN_VALUE es el valor de tu ADMIN_TOKEN_NAME.
  • READ_TOKEN_NAME es el nombre de tu token con el permiso repository:read.
  • READ_TOKEN_VALUE es el valor de tu READ_TOKEN_NAME.
  • WEBHOOK_SECRET_NAME es el nombre de tu secreto de 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 tu conexión de host de Bitbucket Data Center en Cloud Build.
  • BITBUCKET_URI es el URI de tu instancia de Bitbucket Data Center.

Rotar tokens de acceso antiguos o caducados de Bitbucket Data Center

Si tu token de acceso de Bitbucket Data Center caduca, la conexión de tu host de Cloud Build se desconectará de su repositorio de Bitbucket Data Center. Por lo tanto, verás errores en las siguientes circunstancias:

  • Cuando intentas vincular un repositorio de Bitbucket Data Center a una conexión de Cloud Build, aparece un mensaje.Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connection

  • En la página Activadores, cuando haces clic en Ejecutar, se abre la página Ejecutar activador y se muestra un mensaje Failed to list branches. You can still enter one manually.

Para rotar un token antiguo o caducado de tu conexión, sigue estos pasos:

  1. Busca los secretos asociados a tu conexión de host:

    1. Ejecuta el siguiente comando:

      gcloud builds connections describe CONNECTION_PATH --region=REGION
      

      Donde:

      • CONNECTION_PATH es la ruta de la conexión de host de Bitbucket Data Center en Cloud Build, con el formato projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME.
      • REGION es la región de tu conexión.
    2. En el resultado del comando, busca los valores de los campos de tu token de usuario. readAuthorizerCredential.userTokenSecretVersion muestra el nombre de Secret Manager del token Read y authorizerCredential.userTokenSecretVersion muestra el nombre de Secret Manager del token Admin. Estos nombres se almacenan como secretos en Secret Manager.

  2. Rota cada token de acceso en Bitbucket Data Center:

    1. Ve al repositorio de Bitbucket Data Center conectado a tu conexión de host de Cloud Build.

    2. Sigue las instrucciones de la documentación de Bitbucket para rotar un token de acceso. Cuando rotas un token, Bitbucket Data Center crea un token nuevo con credenciales nuevas e invalida la versión anterior de ese token. El token renovado tiene los mismos permisos y el mismo ámbito que el token original.

    3. Copia el ID del token renovado.

  3. Crea una versión secreta para cada token:

    1. Abre la página Secret Manager en la Google Cloud consola:

      Abre la página Secret Manager.

    2. Por cada token que hayas rotado, busca el nombre secreto que hayas identificado en el paso 1 y haz clic en Acciones y, a continuación, en Añadir nueva versión.

    3. En la ventana Añadir nueva versión, introduce el ID del token rotado y haz clic en Añadir nueva versión.

Para obtener más información, consulta los artículos Tokens de acceso y Mejorar la seguridad en Bitbucket: presentación de la caducidad de los tokens de acceso en la documentación de Bitbucket Data Center.

Siguientes pasos