Conéctate a un host de Bitbucket Server

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

Antes de comenzar

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

    Enable the APIs

Configuración

Antes de conectar tu host de Bitbucket Server, debes obtener una clave de API para autenticar y aceptar eventos entrantes de Bitbucket Server. Además, debes otorgarles a IAM permisos en tu proyecto de Google Cloud para crear permisos tokens en Bitbucket Server para crear webhooks y recuperar repositorios de datos no estructurados.

Cómo obtener una clave de API

Para conectar tu host y autenticar eventos de webhook entrantes, sigue estos pasos: necesitas una clave de API.

Para obtener una clave de API, haz lo siguiente:

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

    Abre la página Credenciales.

  2. Haz clic en Crear credenciales.

  3. Haz clic en Clave de API.

    Verás un diálogo con la clave de API que creaste. Anota tu clave de API.

  4. Si deseas restringir tu clave para aplicaciones de productos, haz clic Restringe la clave para completar los pasos adicionales que te permitan proteger tu clave. De lo contrario, haz clic en Cerrar.

    Para obtener información sobre cómo restringir tu clave, consulta Aplica restricciones de claves de API.

Permisos de IAM obligatorios

Para conectar tu host de Bitbucket Server, otorga el Editor de Cloud Build (roles/cloudbuild.builds.editor) y el Rol de Propietario de integraciones de Cloud Build (cloudbuild.integrations.owner) a tu cuenta de usuario.

Para agregar los roles necesarios a tu cuenta de usuario, consulta Configura el acceso a los recursos de Cloud Build. Para obtener más información sobre los roles de IAM asociados con Cloud Build, consulta Roles y permisos de IAM.

Cómo crear tokens de acceso personal

Debes crear dos tokens de acceso personales en Bitbucket Server para realizar las siguientes tareas:

Estos tokens de acceso personal son los permisos mínimos necesarios. Es posible que debas configurar permisos adicionales en el servidor de Bitbucket según sea necesario. Por ejemplo, puedes seleccionar Cuenta de Bitbucket Server para tener acceso solo a un subconjunto de los repositorios de tu instancia de Bitbucket Server y permitir un control más detallado sobre lo que está disponible en Cloud Build.

Después de crear tus tokens de acceso personales, guarda los valores de estos de manera segura para conectarte a tu repositorio de Bitbucket Server.

Cómo conectarse a un host de Bitbucket Server

Console

Para conectar tu host de Bitbucket Server a Cloud Build con la consola de Google Cloud, haz lo siguiente:

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

    Abrir la página repositorios

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

  3. Haz clic en Conectar host.

  4. Selecciona Bitbucket Server en el menú desplegable.

    Verás el panel Connect host.

    Ingresa la siguiente información para conectar tu Bitbucket Instancia del servidor a Cloud Build:

    • Región: Selecciona la región de tu conexión.

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

    1. URL del host: Es la URL del host de tu instancia de Bitbucket Server. Por ejemplo, https://bbs.example-test.com:7990

    2. Clave de API de Google Cloud: la clave de API que se usa para autenticar tu credenciales.

    3. Certificado de AC: Es tu certificado autofirmado. Tu certificado no debe superar los 10 KB de tamaño y debe estar en formato PEM (.pem, .cer o .crt). Si esta sección se deja en blanco, se usará un conjunto predeterminado de certificados.

    4. Nombre de usuario: Es el nombre de usuario de tu cuenta de Bitbucket Server. Esta cuenta debe tener acceso de administrador a los repositorios que deseas conectar con Cloud Build.

    5. Token de acceso de lectura: Es el token de acceso personal de tu cuenta de Bitbucket Server con permisos de lectura.

    6. Token de acceso de administrador: Es el token de acceso personal a tu cuenta de Bitbucket Server. con permisos de administrador en proyectos y repositorios.

    7. En Tipo de red, selecciona una de las siguientes opciones:

      1. Internet pública: Selecciona esta opción si tu instancia es accesible a través de la Internet pública.

      2. Red privada: Selecciona esta opción si tu instancia se aloja en una red privada.

        1. Proyecto: Selecciona tu ID del proyecto de Google Cloud.

        2. Red: Selecciona tu red en el menú desplegable. Si no creaste una red, consulta Crea y administra redes de VPC para obtener información sobre cómo crear una.

        3. Rango de IP: Ingresa el rango de IP interno que se puede asignar a las VMs dentro del rango asignado de una red en pares.

          Puedes especificar el rango con la notación de enrutamiento entre dominios sin clases (CIDR) en el formato STARTING_IP/SUBNET_PREFIX_SIZE. Por ejemplo, 192.0.2.0/24 tiene una longitud de prefijo de 24. Los primeros 24 bits del rango de IP se usan como máscara de subred (192.0.2.0), mientras que las direcciones de hosts posibles varían de 192.0.2.0 a 192.0.2.255.

          El valor de la longitud del prefijo no debe exceder /29. Si la respuesta es no se especifica un valor predeterminado para el rango, se asignará automáticamente un valor predeterminado de /24. Si no se especifica ningún valor para la longitud del prefijo, las direcciones IP se asignan automáticamente dentro de la red de VPC con intercambio de tráfico. Si no se especifica un valor para la dirección IP, se le asigna automáticamente un rango dentro de la red de VPC en pares.

  5. Haz clic en Conectar host.

    Si tu instancia de Bitbucket Server se encuentra en una red con intercambio de tráfico, conectar el host puede tardar varios minutos en completarse.

    Se te redireccionará al panel Connect Repository.

    Después de crear una conexión con el host, tus tokens de acceso personales y el secreto de webhook se almacenará de forma segura en Secret Manager. Puedes ver y administrar tus secretos en la página Secret Manager.

gcloud

Para conectar tu host de Bitbucket Server a Cloud Build usando comandos gcloud, debes ejecutar gcloud alpha builds enterprise-config bitbucketserver create en tu terminal. A diferencia de lo que ocurre con la conexión de tu host la consola de Google Cloud, deberás almacenar de forma manual tu el secreto de webhook y los tokens de acceso en Secret Manager antes de ejecutar el siguiente comando:

gcloud alpha builds enterprise-config bitbucketserver create
    --name=BITBUCKET_SERVER_CONFIG_NAME \
    --user-name=USERNAME \
    --host-uri=HOST_URI \
    --admin-access-token-secret-version=ADMIN_ACCESS_TOKEN_SECRET_VERSION \
    --read-access-token-secret-version=READ_ACCESS_TOKEN_SECRET_VERSION \
    --webhook-secret-secret-version=WEBHOOK_SECRET_SECRET_VERSION \
    --api-key=API_KEY \
    --peered-network=PEERED_NETWORK \
    --peered-network-ip-range=PEERED_NETWORK_IP_RANGE \
    --ssl-ca-file=SSL_CA_FILE

Aquí:

  • BITBUCKET_SERVER_CONFIG_NAME es el nombre de la configuración de tu servidor de Bitbucket.
  • USERNAME es tu nombre de usuario de Bitbucket Server.
  • HOST_URI es el URI del host de tu instancia de Bitbucket Server.
  • ADMIN_ACCESS_TOKEN_SECRET_VERSION es el nombre del recurso de tu token de acceso de administrador almacenado en Secret Manager. El formato esperado para los Secrets almacenados en Secret Manager es projects/${PROJECT_ID}/secrets/${SECRET_NAME}/versions/${VERSION_NUMBER}. Puedes especificar latest como tu versión para usar la versión más reciente de tu secreto. Esto se aplica a cada recurso almacenado en Secret Manager.
  • READ_ACCESS_TOKEN_SECRET_VERSION es el nombre del recurso de tu de acceso de lectura almacenado en Secret Manager.
  • WEBHOOK_SECRET_SECRET_VERSION es el nombre del recurso de tu secreto de webhook almacenado en Secret Manager.
  • API_KEY es la clave de la API de Google Cloud.
  • [Opcional] PEERED_NETWORK es la red de VPC a la que te conectarás para tus instancias de Bitbucket Server locales. Para obtener más información, consulta Compila repositorios de Bitbucket Server en una red privada.

  • PEERED_NETWORK_IP_RANGE es la IP interna (opcional) al que se pueden asignar las VMs dentro del rango asignado de una red con intercambio de tráfico.

  • SSL_CA_FILE es la ruta de acceso a un archivo local que contiene tu certificado SSL para usar en las solicitudes al servidor de Bitbucket. El certificado debe estar en formato PEM.

API

Para conectar tu host de Bitbucket Server a Cloud Build con la API, usa la siguiente plantilla de JSON. A diferencia de conectar tu host con la consola de Google Cloud, debes almacenar manualmente tus tokens de acceso personales y el secreto del webhook en Secret Manager antes de llamar a la API:

  {
      "hostUri": "HOST_URI",
      "username": "USERNAME",
      "apiKey": "API_KEY",
      "secrets": {
        "adminAccessTokenVersionName": "ADMIN_ACCESS_TOKEN_SECRET_VERSION",
        "readAccessTokenVersionName": "READ_ACCESS_TOKEN_SECRET_VERSION",
        "webhookSecretVersionName": "WEBHOOK_SECRET_SECRET_VERSION",
      },
      "peeredNetwork": "PEERED_NETWORK",
      "peeredNetworkIpRange": "PEERED_NETWORK_IP_RANGE",
      "sslCa": "SSL_CERTIFICATE"
  }

Aquí:

  • HOST_URI es el URI de host de tu instancia de Bitbucket Server.
  • USERNAME es tu nombre de usuario de Bitbucket Server.
  • API_KEY es la clave de la API de Google Cloud.
  • ADMIN_ACCESS_TOKEN_SECRET_VERSION es el nombre del recurso de tu token de acceso de administrador almacenado en Secret Manager. Es posible que debas otorgar el rol de descriptor de acceso a secretos de Secret Manager a tu agente de servicio de Cloud Build, service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com. Para Para obtener más información, consulta Otorga el rol de Secret Manager a tu cuenta de servicio.

  • READ_ACCESS_TOKEN_SECRET_VERSION es el nombre del recurso de tu de acceso de lectura almacenado en Secret Manager.

  • WEBHOOK_SECRET_SECRET_VERSION es el nombre del recurso de tu del Secret de webhook almacenado en Secret Manager.

  • [Opcional] PEERED_NETWORK es la red de VPC a la que se conectarán tus instancias de Bitbucket Server locales.

    Puedes especificar el rango con la notación de enrutamiento entre dominios sin clases (CIDR) en el formato STARTING_IP/SUBNET_PREFIX_SIZE. Por ejemplo, 192.0.2.0/24 tiene una longitud de prefijo de 24. Los primeros 24 bits del rango de IP se usan como máscara de subred (192.0.2.0), mientras que las posibles direcciones de hosts rango de 192.0.2.0 a 192.0.2.225.

  • PEERED_NETWORK_IP_RANGE es la IP interna (opcional) al que se pueden asignar las VMs dentro del rango asignado de una red con intercambio de tráfico.

  • [Opcional] SSL_CERTIFICATE es el certificado SSL que se usa para tus instancias de Bitbucket Server en las instalaciones.

Ingresa el siguiente comando curl en la terminal:

  curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8"  -H "x-goog-user-project: PROJECT_NUMBER" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/bitbucketServerConfigs/?bitbucketServerConfigId=BITBUCKET_SERVER_CONFIG_NAME -d @config.json

Aquí:

  • PROJECT_NUMBER es el número de proyecto de Cloud.
  • PROJECT_ID es el ID del proyecto de Cloud.
  • REGION es la región asociada a tu configuración de Bitbucket Server.
  • BITBUCKET_SERVER_CONFIG_NAME es el nombre de tu configuración de Bitbucket Server.

Si el proceso es satisfactorio, el cuerpo de la respuesta contiene una instancia nueva de Operation.

Ingresa el siguiente comando curl en la terminal:

  curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8"  -H "x-goog-user-project: PROJECT_NUMBER" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

Aquí:

  • PROJECT_NUMBER es el número de proyecto de Cloud.
  • PROJECT_ID es el ID del proyecto de Cloud.
  • REGION es la región asociada a tu configuración de Bitbucket Server.
  • OPERATION_ID es el ID de la operación de creación de configuración de Bitbucket Server.

Es posible que debas seguir ejecutando el comando de la API de GetOperation hasta que la respuesta contenga done: true, que indica que se completó la operación. Si la configuración de Bitbucket Server se crea correctamente, puedes verla en el campo response.value. De lo contrario, consulta el campo error para obtener un informe de errores detallado.

¿Qué sigue?