Conectarse a un host de GitLab Enterprise Edition

En esta página se explica cómo conectarse a un host de GitLab Enterprise Edition en Cloud Build.

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

Requisitos del host

  • Si no has instalado una instancia de GitLab Enterprise Edition Server, consulta las instrucciones de la guía de instalación de GitLab Enterprise Edition.

    Cuando sigas las instrucciones para instalar una instancia de GitLab Enterprise Edition Server, ten en cuenta lo siguiente:

    • Debes configurar tu host para que gestione el protocolo HTTPS. No se admiten hosts configurados con el protocolo HTTP.

    • Debe configurar su host con la misma URL que se usa para acceder a su host desde Google Cloud. Para obtener más información, consulta la documentación de GitLab sobre cómo configurar la URL externa.

Permisos de gestión de identidades y accesos necesarios

Para conectar tu host de GitLab Enterprise Edition, otorga el rol Administrador de conexiones de Cloud Build (roles/cloudbuild.connectionAdmin) a tu cuenta de usuario.

Para añadir los roles necesarios a tu cuenta de usuario, consulta el artículo Configurar el acceso a recursos de Cloud Build. Para obtener más información sobre los roles de gestión de identidades y accesos asociados a Cloud Build, consulta Roles y permisos de gestión de identidades y accesos.

Si tu instancia de GitLab Enterprise Edition está alojada en una red privada, consulta el artículo Crear repositorios desde GitLab Enterprise Edition en una red privada para obtener información sobre los roles de gestión de identidades y accesos adicionales que se necesitan antes de conectar el host.

Conectarse a un host de GitLab Enterprise Edition

Antes de crear una conexión de host para tu instancia de GitLab Enterprise Edition, debes crear tokens de acceso personal en GitLab Enterprise Edition siguiendo estos pasos:

  1. Inicia sesión en tu instancia de GitLab Enterprise Edition.

  2. En la página de GitLab Enterprise Edition de tu instancia, haz clic en tu avatar, situado en la esquina superior derecha.

  3. Haz clic en Editar perfil.

  4. En la barra lateral de la izquierda, selecciona Tokens de acceso.

    Verás la página Tokens de acceso personales.

  5. Crea un token de acceso con el permiso api para conectar y desconectar repositorios.

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

Consola

Para conectar tu host de GitLab Enterprise Edition a Cloud Build, sigue estos pasos:

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

    Abre la página Repositorios.

    Verás 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 GitLab 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.

    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. Proveedor de GitLab: selecciona GitLab Enterprise Edition autogestionado como proveedor.

    2. URL del host: introduce la URL del host de tu conexión. Por ejemplo, https://my-gle-server.net.

    3. Certificado de AC: haz clic en Examinar para subir tu certificado autofirmado.

    4. En Tipo de conexión, 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. Acceso a la red privada: selecciona esta opción si tu instancia está alojada en una red privada.

      3. En Servicio de directorio de servicios, selecciona la ubicación de tu servicio:

        • En el proyecto your-project
        • En otro proyecto
        • Introducir manualmente
        1. Si seleccionas En otro proyecto o Introducir manualmente, indica la siguiente información:

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

          • Región: este campo selecciona previamente la región de tu conexión. La zona especificada para tu servicio debe coincidir con la zona 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.

  8. En la sección Tokens de acceso personales, introduce la siguiente información:

    1. Token de acceso a la API: introduce el token con acceso al ámbito api. Este token se usa para conectar y desconectar repositorios.

    2. Leer token de acceso a la API: introduce el token con el ámbito read_api access. Los activadores de Cloud Build usan este token para acceder al código fuente de los repositorios.

  9. 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 crear la conexión de host, Cloud Build también crea un secreto de webhook por ti. Puedes ver y gestionar secretos en la página Secret Manager. Puedes ver y gestionar tus secretos en la página Secret Manager.

Ya has creado una conexión de GitLab Enterprise Edition.

gcloud

Antes de conectar tu host de GitLab Enterprise Edition a Cloud Build, sigue estos pasos para almacenar tus credenciales:

  1. Almacena tu token en Secret Manager.

  2. Crea un secreto de webhook en Secret Manager ejecutando el siguiente comando:

     cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-
    
  3. Si almacenas tus secretos en un proyecto de Google Cloud distinto del que vas a usar para crear una conexión de host, introduce 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 puedes conectar tu host de GitLab Enterprise Edition a Cloud Build.

Este agente debe seguir estos pasos:

  1. Introduce el siguiente comando para crear una conexión de GitLab Enterprise Edition:

    gcloud builds connections create gitlab CONNECTION_NAME \
      --host-uri=HOST_URI \
      --project=PROJECT_ID \
      --region=REGION \
      --authorizer-token-secret-version=projects/PROJECT_ID/secrets/API_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
    

    Donde:

    • CONNECTION_NAME es el nombre de tu conexión en Cloud Build.
    • HOST_URI es el URI de tu instancia de GitLab Enterprise Edition. Por ejemplo, https://my-gle-server.net.
    • PROJECT_ID es el ID de tu proyecto Google Cloud .
    • REGION es la región de tu conexión.
    • API_TOKEN es el nombre de tu token con el apipermiso.
    • READ_TOKEN es el nombre de tu token con el read_apipermiso.
    • SECRET_VERSION es la versión de tu secreto.
    • Tu secreto de webhook es WEBHOOK_SECRET.

Ya has creado una conexión de GitLab Enterprise Edition.

Terraform

Puedes conectar tu host de GitLab Enterprise Edition a Cloud Build con Terraform. Más información sobre Terraform en Google Cloud

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

  • Configura el proveedor de Terraform para los recursos de Google Cloud.
  • Crea un secreto para almacenar tu token de acceso personal de GitLab Enterprise Edition.
  • Concede los permisos necesarios al agente de servicio de Cloud Build para acceder a los secretos.
  • Crea una conexión de GitLab Enterprise Edition.

    // Configure the Terraform Google provider
    terraform {
      required_providers {
        google = {}
      }
    }
    
    // Create secrets and grant permissions to the Cloud Build service agent
    resource "google_secret_manager_secret" "api-pat-secret" {
        project = "PROJECT_ID"
        secret_id = "GITLAB_PAT_API"
    
        replication {
            auto {}
         }
     }
    
     resource "google_secret_manager_secret_version" "api-pat-secret-version" {
         secret = google_secret_manager_secret.api-pat-secret.id
         secret_data = "GITLAB_API_TOKEN"
     }
    
     resource "google_secret_manager_secret" "read-pat-secret" {
         project = "PROJECT_ID"
         secret_id = "GITLAB_PAT_READ"
    
         replication {
             auto {}
         }
    }
    
    resource "google_secret_manager_secret_version" "read-pat-secret-version" {
        secret = google_secret_manager_secret.read-pat-secret.id
        secret_data = "GITLAB_API_TOKEN"
    }
    
    resource "google_secret_manager_secret" "webhook-secret-secret" {
        project = "PROJECT_ID"
        secret_id = "WEBHOOK_SECRET"
    
        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" "serviceagent-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.api-pat-secret.project
      secret_id = google_secret_manager_secret.api-pat-secret.secret_id
      policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy-rpak" {
      project = google_secret_manager_secret.read-pat-secret.project
      secret_id = google_secret_manager_secret.read-pat-secret.secret_id
      policy_data = data.google_iam_policy.serviceagent-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.serviceagent-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"
    
        gitlab_config {
            host_uri = "URI"
            authorizer_credential {
                user_token_secret_version = google_secret_manager_secret_version.api-pat-secret-version.id
            }
            read_authorizer_credential {
                 user_token_secret_version = google_secret_manager_secret_version.read-pat-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
        ]
    }
    

Haz los cambios siguientes:

  • PROJECT_ID: tu ID de proyecto Google Cloud .
  • GITLAB_PAT_API: tu token de acceso personal con acceso api.
  • GITLAB_API_TOKEN: tu token de acceso personal.
  • GITLAB_PAT_READ: tu token de acceso personal con acceso read_api.
  • WEBHOOK_SECRET: el nombre del secreto que contiene el valor secreto de tu webhook.
  • WEBHOOK_SECRET_VALUE: el valor de tu secreto de webhook.
  • PROJECT_NUMBER: tu Google Cloud proyecto número. Puedes encontrar el número de tu proyecto en la página Bienvenido de la consola Google Cloud o ejecutando el siguiente comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
    
  • REGION: la región de tu conexión.

  • CONNECTION_NAME: nombre de la conexión de host de GitLab Enterprise Edition en Cloud Build.

  • URI: el URI de tu conexión. Por ejemplo, https://my-gitlab-enterprise-server.net.

Ya has creado una conexión de GitLab Enterprise Edition.

Rotar tokens de acceso antiguos o caducados de GitLab Enterprise Edition

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

  • Cuando intentas vincular un repositorio de GitLab Enterprise Edition 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 tu conexión de host de GitLab Enterprise Edition 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_api y authorizerCredential.userTokenSecretVersion muestra el nombre de Secret Manager del token api. Estos nombres se almacenan como secretos en Secret Manager.

  2. Rota cada token de acceso en GitLab Enterprise Edition:

    1. Ve al repositorio de GitLab Enterprise Edition conectado a tu conexión de host de Cloud Build.

    2. Sigue las instrucciones de la documentación de GitLab para rotar un token de acceso. Cuando se rota un token, GitLab Enterprise Edition crea un token con nuevas credenciales 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 Vencimiento del token de acceso en la documentación de GitLab Enterprise Edition.

Siguientes pasos