Conéctate a un host de GitHub Enterprise

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

Antes de comenzar

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

Permisos de IAM obligatorios

Para conectar tu host de GitHub Enterprise, otorga al Administrador de conexiones de Cloud Build (roles/cloudbuild.connectionAdmin) a tu cuenta de usuario.

Para agregar las funciones necesarias 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.

Para crear conexiones mediante los pasos de instalación de gcloud, otorga a Rol Administrador de Secret Manager (roles/secretmanager.admin) para el agente de servicio de Cloud Build ejecutando el siguiente comando en tu proyecto de Google Cloud:

      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"

Si tu instancia de GitHub Enterprise está alojada en una red privada, consulta Compila repositorios de GitHub Enterprise en una red privada para conocer los roles de IAM adicionales necesarios antes de conexión de host.

Conéctate a un host de GitHub Enterprise

Console

Para conectar tu host de GitHub Enterprise a Cloud Build, sigue estos 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 de la barra superior, selecciona tu proyecto de Google Cloud.

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

  4. Haz clic en Create host connection para conectar un host nuevo a Cloud Build.

  5. En el panel izquierdo, selecciona GitHub Enterprise como tu proveedor de código fuente.

  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.

  7. En la sección Detalles del host, ingresa la siguiente información:

    1. URL del host: Ingresa la URL del host de tu conexión. Por ejemplo, github.example.com

    2. Certificado de CA: Haz clic en Explorar para subir tu certificado autofirmado.

    3. En Tipo de conexión, selecciona una de las siguientes opciones:

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

      2. Acceso a redes privadas: Selecciona esta opción si tu instancia está alojada en una red privada.

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

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

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

          • Región: En este campo, se preselecciona la región de tu conexión. La región especificada de 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.

  8. Haz clic en Conectar.

    Después de hacer clic en el botón Conectar, se te pedirá que crees una app de GitHub en tu GitHub Enterprise aloja y, luego, instala la app en una organización o cuenta de usuario. Los token de autenticación de tu host de GitHub Enterprise se creará y almacenará en proyecto como un Secret de Secret Manager. Puedes revocar el acceso desinstalando o borrar la app de GitHub de tu host en cualquier momento

    Cloud Build almacena los datos de autenticación de la App de GitHub como Secrets en Secret Manager de tu proyecto. Estos datos incluyen tu clave privada y el secreto de webhook. La clave privada se usa como método de autenticación para acceder a la API de Enterprise Server. El secreto de webhook se usa para validar la enviados desde el servidor a Cloud Build. La cuenta del agente de servicio de Cloud Build (service-{projectNumber}@gcp-sa-cloudbuild.iam.gserviceaccount.com) se usa para acceder a tu secreto. Para ver tu secreto, Consulta Enumera los secretos y visualiza sus detalles.

    Luego de autorizar la app de GitHub de Cloud Build, podrás se redireccionará a los Repositorios de Cloud Build .

Creaste correctamente una conexión de GitHub Enterprise.

gcloud

Para conectar tu host de GitHub Enterprise a Cloud Build con gcloud, completa los siguientes pasos:

  1. Escribe el siguiente comando para crear una conexión de GitHub Enterprise:

    gcloud builds connections create github-enterprise CONNECTION_NAME \
      --host-uri=HOST_URI --region=REGION
    

    Aquí:

    • CONNECTION_NAME es el nombre de la conexión.
    • HOST_URI es el URI de tu instancia de GitHub Enterprise. Por ejemplo, https://mmy-ghe-server.net
    • REGION es la región de tu conexión.

    Si tu instancia de GitHub Enterprise se encuentra en una red privada, especifica tu recurso del Directorio de servicios. También puedes especificar tu certificado de la AC.

    --service-directory-service=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME \
    --ssl-ca-file=SSL_CA_FILEPATH
    

    Aquí:

    • PROJECT_ID es tu ID del proyecto de Cloud.
    • REGION es la región de tu conexión.
    • NAMESPACE es el espacio de nombres de tu servicio.
    • SERVICE_NAME es el nombre del servicio en tu espacio de nombres.
    • SSL_CA_FILEPATH es la ruta de acceso al archivo de tu certificado de la AC.

    Después de ejecutar el comando gcloud builds connections..., recibirás un vínculo para instalar la app de GitHub de Cloud Build.

  2. Sigue el vínculo devuelto en el paso anterior para crear e instalar el App de GitHub de Cloud Build en tu servidor empresarial.

  3. Ingresa el siguiente comando para verificar la conexión:

    gcloud builds connections describe CONNECTION_NAME --region=REGION
    

    Aquí:

    • CONNECTION_NAME es el nombre de tu conexión.
    • REGION es la región de tu conexión.

    Si el campo installationState está configurado como COMPLETE, significa que instaló la conexión. De lo contrario, el campo installationState proporciona un vínculo para los pasos adicionales necesarios.

Creaste correctamente una conexión de GitHub Enterprise.

Conéctate a un host de GitHub Enterprise de manera programática

Para conectar tu host de GitHub Enterprise de manera programática a Cloud Build, sigue estos pasos: debes instalar la app de GitHub completando los siguientes pasos:

  1. Registra una app de GitHub nueva. Por ejemplo, puedes registrar una app de GitHub nueva en https://my-ghe-server.net/settings/apps/new.

  2. Completa los campos de la página:

    1. Nombre de la app de GitHub: Ingresa un nombre para tu app.
    2. URL de la página principal: Ingresa una URL para el servidor de GitHub Enterprise.
    3. Desmarca la casilla Expirar tokens de autorización del usuario.
    4. En la sección Webhook, completa los siguientes pasos:
      • Activo: Marca la casilla para activar tu libro electrónico.
      • URL de webhook: Ingresa la URL de tu webhook. Por ejemplo, https://cloudbuild.googleapis.com/v2/projects/{PROJECT_NUMBER}/locations/{REGION}/connections:processWebhook La región de la URL del webhook debe coincidir con la región de tu conexión.
      • Secreto de webhook: Ingresa una string generada de forma aleatoria y anótala.
    5. En la sección Permisos, especifica los siguientes permisos:
      • Permisos del repositorio:
        • Verificaciones: Lectura y escritura
        • Contenido: Leer y escribir
        • Problemas: Solo lectura
        • Metadatos: Solo lectura
        • Estados de confirmación: Solo lectura
        • Solicitudes de extracción: Solo lectura
    6. En la sección Suscribirse a eventos, marca las siguientes casillas:
      • Ejecución de la verificación
      • Comprobar suite
      • Confirmar comentario
      • Comentario del problema
      • Solicitud de extracción
      • Comentario de revisión de la solicitud de extracción
      • Envío
      • Repositorio
    7. Marca la casilla de Cualquier cuenta para permitir que cualquier usuario o una organización instale tu app de GitHub.
  3. Haz clic en Crear app de GitHub para crear tu app de GitHub.

    Una vez que hagas clic en Crear app de GitHub, se te redireccionará a la página de tu app. Toma Nota del ID de la app y el slug de la app. El slug de la app se puede encontrar en el último segmento de la URL de la página. Por ejemplo, https://my-ghe-server.net/settings/apps/{app-slug}

  4. En la sección Claves privadas, haz clic en Generar una clave privada.

    Guarda el archivo descargado en un lugar seguro.

  5. En el panel izquierdo, selecciona Instalar app.

    Selecciona el usuario o la organización en el que quieres instalar la app. Después de instalar la app, toma nota del ID de instalación. El ID de instalación está en el último segmento de la URL. de la página. Por ejemplo, https://my-ghe-server.net/settings/installations/{installation-id}.

Después de instalar la app de GitHub, completa los siguientes pasos para conecta tu host de GitHub Enterprise de forma programática con Terraform o gcloud

Terraform

Una vez que hayas instalado la app de GitHub, puedes conectar tu host de GitHub Enterprise a Cloud Build con el proveedor de Terraform de Google.

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

  • Configura el proveedor de Google para Terraform
  • Crea un secreto para almacenar el secreto de webhook y la clave privada de la app de GitHub.
  • Otorga los permisos necesarios al agente de servicio de Cloud Build para acceder a los secretos.
  • Crea una conexión de GitHub Enterprise.

    // Configure the terraform google provider
    terraform {
      required_providers {
        google = {}
      }
    }
    
    // create Secrets and grant permissions to the Service Agent
    resource "google_secret_manager_secret" "private-key-secret" {
        project = "PROJECT_ID"
        secret_id = "PRIVATE_KEY_SECRET"
    
        replication {
            auto {}
        }
    }
    
    resource "google_secret_manager_secret_version" "private-key-secret-version" {
        secret = google_secret_manager_secret.private-key-secret.id
        secret_data = file("private-key.pem")
    }
    
    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-pk" {
      project = google_secret_manager_secret.private-key-secret.project
      secret_id = google_secret_manager_secret.private-key-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"
    
        github_enterprise_config {
            host_uri = "URI"
            private_key_secret_version = google_secret_manager_secret_version.private-key-secret-version.id
            webhook_secret_secret_version = google_secret_manager_secret_version.webhook-secret-secret-version.id
            app_id = "APP_ID"
            app_slug = "APP_SLUG"
            app_installation_id = INSTALLATION_ID
        }
    
        depends_on = [
            google_secret_manager_secret_iam_policy.policy-pk,
            google_secret_manager_secret_iam_policy.policy-whs
        ]
    }
    

Aquí:

  • PROJECT_ID es tu ID del proyecto de Cloud.
  • PRIVATE_KEY_SECRET es el secreto que contiene la clave privada de tu app de GitHub.
  • WEBHOOK_SECRET es el nombre del Secret que contiene el valor del secreto del webhook de tu app de GitHub.
  • WEBHOOK_SECRET_VALUE es el valor del secreto del webhook de tu app de GitHub.
  • REGION es la región de tu conexión.
  • CONNECTION_NAME es el nombre de tu conexión de GitHub.
  • URI es el URI de tu conexión. Por ejemplo, https://my-github-enterprise-server.net
  • APP_ID es el ID de tu app de GitHub.
  • APP_SLUG es el slug de la app. Por ejemplo, https://github.com/settings/apps/{app-slug}
  • INSTALLATION_ID es el ID de instalación de tu app de GitHub. Tu el ID de instalación en la URL de tu Cloud Build App de GitHub, https://github.com/settings/installations/{installation-id}.

Creaste correctamente una conexión de GitHub Enterprise.

gcloud

Después de instalar la app de GitHub, completa los siguientes pasos para conectar tu host de GitHub Enterprise de forma programática con gcloud:

  1. Almacena tus secretos en Secret Manager:

    echo -n WEBHOOK_SECRET | gcloud secrets create mygheapp-webhook-secret --data-file=-
    # creating secret from the downloaded private key:
    gcloud secrets create mygheapp-private-key --data-file=PRIVATE_KEY_FILE
    

    Aquí:

    • WEBHOOK_SECRET es la cadena que creaste para el secreto de tu webhook.
    • PRIVATE_KEY_FILE es la ruta de acceso al archivo de la clave privada que generaste.
  2. Otorga acceso al agente de servicio de Cloud Build para acceder a tus secretos:

    PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    CLOUD_BUILD_SERVICE_AGENT="service-$PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud secrets add-iam-policy-binding mygheapp-webhook-secret \
      --member="serviceAccount:CLOUD_BUILD_SERVICE_AGENT" \
      --role="roles/secretmanager.secretAccessor"
    gcloud secrets add-iam-policy-binding mygheapp-private-key \
      --member="serviceAccount:CLOUD_BUILD_SERVICE_AGENT" \
      --role="roles/secretmanager.secretAccessor"
    

    Aquí:

    • PROJECT_ID es tu ID del proyecto de Cloud.
    • CLOUD_BUILD_SERVICE_AGENT es tu cuenta por producto por proyecto.
  3. Crea tu conexión de GitHub Enterprise:

    gcloud builds connections create github-enterprise CONNECTION_NAME \
      --host-uri=HOST_URI \
      --app-id=APP_ID \
      --app-slug=APP_SLUG \
      --private-key-secret-version=projects/PROJECT_ID/secrets/mygheapp-private-key/versions/1 \
      --webhook-secret-secret-version=projects/PROJECT_ID/secrets/mygheapp-webhook-secret/versions/1 \
      --app-installation-id=INSTALLATION_ID \
      --region=REGION
    

    Aquí:

    • CONNECTION_NAME es el nombre de la conexión.
    • HOST_URI es el URI de tu instancia de GitHub Enterprise. Por ejemplo, https://mmy-ghe-server.net
    • APP_ID es el ID de tu app de GitHub.
    • APP_SLUG es el fragmento de la app. Por ejemplo, https://my-ghe-server.net/settings/apps/app-slug
    • PROJECT_ID es tu ID del proyecto de Cloud.
    • INSTALLATION_ID es el ID de instalación de tu app de GitHub. Por ejemplo: https://my-ghe-server.net/settings/installations/installation-id
    • REGION es la región de tu conexión.

    Si tu instancia de GitHub Enterprise se encuentra en una red privada, especifica tu recurso de directorio de servicios. También puedes especificar tu certificado de la AC.

      --service-directory-service=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME \
      --ssl-ca-file=SSL_CA_FILEPATH
    

    Aquí:

    • PROJECT_ID es tu ID del proyecto de Cloud.
    • REGION es la región de tu conexión.
    • NAMESPACE es el espacio de nombres de tu servicio.
    • SERVICE_NAME es el nombre del servicio en tu espacio de nombres.
    • SSL_CA_FILEPATH es la ruta de acceso al archivo de tu certificado de la AC.

Creaste correctamente una conexión de GitHub Enterprise.

Próximos pasos