Conectarse 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 empezar

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

Permisos de gestión de identidades y accesos necesarios

Para conectar tu host de GitHub Enterprise, asigna 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.

Para crear conexiones siguiendo los pasos de instalación de gcloud, concede el rol Administrador de Secret Manager (roles/secretmanager.admin) al 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 el artículo Crear repositorios desde GitHub Enterprise en una red privada para obtener información sobre los roles de gestión de identidades y accesos adicionales que se necesitan antes de establecer la conexión de host.

Conectarse a un host de GitHub Enterprise

Consola

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 .

    Abre la página Repositorios.

    Verás la página Repositorios.

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

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

  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 GitHub Enterprise 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 anfitrión, introduce la siguiente información:

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

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

    3. 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, introduce la siguiente información:

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

          • Región: este campo preselecciona 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. Haz clic en Connect (Conectar).

    Después de hacer clic en el botón Conectar, se te pedirá que crees una aplicación de GitHub en tu host de GitHub Enterprise y que la instales en una cuenta de usuario o en una organización. Se creará un token de autenticación de tu host de GitHub Enterprise y se almacenará en este proyecto como secreto de Secret Manager. Puedes revocar el acceso desinstalando o eliminando la aplicación de GitHub de tu host en cualquier momento.

    Cloud Build almacena los datos de autenticación de la aplicación de GitHub creada como secretos en Secret Manager en 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 del servidor Enterprise. El secreto de webhook se usa para validar los eventos enviados del servidor a Cloud Build. La cuenta de 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 Mostrar secretos y ver detalles de secretos.

    Después de autorizar la aplicación de GitHub para Cloud Build, se te redirigirá a la página Repositorios de Cloud Build.

gcloud

Para conectar tu host de GitHub Enterprise a Cloud Build mediante comandos gcloud, sigue estos pasos:

  1. Introduce 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
    

    Donde:

    • CONNECTION_NAME es el nombre de tu conexión de host de GitHub Enterprise en Cloud Build.
    • 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 está en una red privada, especifica tu recurso de Service Directory. También puedes especificar tu certificado de CA.

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

    Donde:

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

    Después de ejecutar el comando gcloud builds connections..., recibirás un enlace para instalar la aplicación de GitHub para Cloud Build.

  2. Sigue el enlace que se ha devuelto en el paso anterior para crear e instalar la aplicación de GitHub para Cloud Build en tu servidor de empresa.

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

    gcloud builds connections describe CONNECTION_NAME --region=REGION
    

    Donde:

    • CONNECTION_NAME es el nombre de tu conexión de host de GitHub Enterprise en Cloud Build.
    • REGION es la región de tu conexión.

    Si el campo installationState tiene el valor COMPLETE, significa que has instalado la conexión correctamente. De lo contrario, en el campo installationState se proporciona un enlace con los pasos adicionales que debes seguir.

Conectarse a un host de GitHub Enterprise mediante programación

Para conectar tu host de GitHub Enterprise a Cloud Build mediante programación, debes instalar la aplicación de GitHub siguiendo estos pasos:

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

  2. Rellena los campos de la página:

    1. Nombre de la aplicación de GitHub: introduce un nombre para tu aplicación.
    2. URL de la página principal: introduce una URL de tu GitHub Enterprise Server.
    3. Desmarca la casilla Vencimiento de los tokens de autorización de usuario.
    4. En la sección Webhook, sigue estos pasos:
      • Activo: marca la casilla para activar tu webhook.
      • URL del webhook: introduce la URL del webhook. Por ejemplo, https://cloudbuild.googleapis.com/v2/projects/{PROJECT_NUMBER}/locations/{REGION}/connections:processWebhook. La región de la URL de webhook debe coincidir con la región de tu conexión.
      • Secreto de webhook: introduce una cadena generada de forma aleatoria y anótala.
    5. En la sección Permisos, especifica los siguientes permisos:
      • Permisos del repositorio:
        • Comprobaciones: lectura y escritura
        • Contenido: lectura y escritura
        • 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:
      • Comprobar ejecución
      • Comprobar suite
      • Comentario de confirmación
      • Comentar problema
      • Solicitud de extracción
      • Comentario de revisión de solicitud de extracción
      • Empuje
      • Repositorio
    7. Marca la casilla Cualquier cuenta para permitir que cualquier usuario u organización instale tu aplicación de GitHub.
  3. Haz clic en Create GitHub app (Crear aplicación de GitHub) para crear tu aplicación de GitHub.

    Cuando hagas clic en Crear aplicación de GitHub, se te redirigirá a la página de tu aplicación. Anota el ID y el slug de la aplicación. El slug de la aplicación se encuentra 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 de la izquierda, selecciona Instalar aplicación.

    Selecciona el usuario o la organización en la que quieras instalar la aplicación. Una vez instalada, anota el ID de instalación. El ID de instalación se encuentra en el último segmento de la URL de la página. Por ejemplo, https://my-ghe-server.net/settings/installations/{installation-id}.

Una vez que hayas instalado tu aplicación de GitHub, sigue estos pasos para conectar tu host de GitHub Enterprise de forma programática mediante Terraform o gcloud.

Terraform

Una vez que hayas instalado la aplicación de GitHub, podrás conectar tu host de GitHub Enterprise a Cloud Build mediante el proveedor de Terraform de Google.

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

  • Configura el proveedor de Google de Terraform.
  • Crea un secreto para almacenar la clave privada y el secreto de webhook de la aplicación de GitHub.
  • Concede 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
        ]
    }
    

Donde:

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

gcloud

Una vez que hayas instalado la aplicación de GitHub, sigue estos pasos para conectar tu host de GitHub Enterprise de forma programática mediante 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
    

    Donde:

    • WEBHOOK_SECRET es la cadena que has creado para el secreto de tu webhook.
    • PRIVATE_KEY_FILE es la ruta a la clave privada que has generado.
  2. Concede acceso al agente de servicio de Cloud Build para que pueda 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"
    

    Donde:

    • PROJECT_ID es el ID de tu proyecto Google Cloud .
    • CLOUD_BUILD_SERVICE_AGENT es tu cuenta de 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
    

    Donde:

    • CONNECTION_NAME es el nombre de tu conexión de host de GitHub Enterprise en Cloud Build.
    • 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 aplicación de GitHub.
    • APP_SLUG es el slug de la aplicación. Por ejemplo, https://my-ghe-server.net/settings/apps/app-slug.
    • PROJECT_ID es el ID de tu proyecto Google Cloud .
    • INSTALLATION_ID es el ID de instalación de tu aplicación 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 está en una red privada, especifica tu recurso de Service Directory. También puedes especificar tu certificado de CA.

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

    Donde:

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

Pasos siguientes