Conéctate a un repositorio de GitHub

En esta página, se explica cómo conectar un repositorio de GitHub a Cloud Build. Para obtener más información sobre los repositorios de Cloud Build, consulta Repositorios de Cloud Build.

Antes de comenzar

  • Habilita las API de Cloud Build and Secret Manager.

    Habilita las API

  • Ten listo tu código fuente en un repositorio de GitHub.
  • Ten un Dockerfile o un archivo de configuración de Cloud Build en el repositorio de código fuente de GitHub.
  • Si inicialmente conectas tu repositorio a Cloud Build, asegúrate de tener permisos de nivel de administrador en el repositorio. Para obtener más información sobre los permisos del repositorio de GitHub, consulta Niveles de permiso del repositorio de una organización.
  • Para usar los comandos de gcloud en esta página, instala Google Cloud CLI.

Conecta un host de GitHub

Consola

Para conectar el repositorio de GitHub a Cloud Build, haz lo siguiente:

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

    Abrir la página repositorios

    Verás la página Repositorios.

  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 2a gen..

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

  5. En el panel izquierdo, selecciona GitHub 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 la conexión.

  7. Haz clic en Conectar.

    Después de hacer clic en el botón Conectar, se te pedirá que autorices a la app de GitHub de Cloud Build para que acceda a tu cuenta de GitHub. Puedes revocar el acceso a la app si desinstalas o borras la app del host en cualquier momento.

    Cloud Build solicita la autorización de tu cuenta de usuario de GitHub y almacena el token de autorización resultante como un secreto en Secret Manager de tu proyecto. El token de autorización se usa para validar el acceso de tu cuenta de usuario a la instalación de la app de GitHub de Cloud Build y a los repositorios vinculados. 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 consulta los detalles de los secretos.

    Después de autorizar la app de GitHub de Cloud Build, se te redireccionará a la página Repositorios de Cloud Build.

Creaste correctamente una conexión de GitHub.

gcloud

Para conectar el host de GitHub con gcloud, completa los siguientes pasos:

  1. Ingresa el siguiente comando para iniciar una conexión con tu repositorio de GitHub:

     gcloud builds connections create github CONNECTION_NAME --region=REGION
    

    Donde:

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

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

  2. Accede a tu cuenta de github.com.

  3. Sigue el vínculo para autorizar la app de GitHub de Cloud Build.

    Después de autorizar la app, Cloud Build almacena un token de autenticación como secreto en Secret Manager en tu proyecto de Google Cloud. Puedes ver tus secretos en la página Secret Manager.

  4. Instala la app de GitHub de Cloud Build en tu cuenta o en una organización de tu propiedad.

    Permite la instalación con tu cuenta de GitHub y selecciona los permisos del repositorio cuando se te solicite.

  5. Ejecuta el siguiente comando para verificar la instalación de tu conexión de GitHub:

     gcloud builds connections describe CONNECTION_NAME --region=REGION
    

    Donde:

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

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

Creaste correctamente una conexión de GitHub.

Conecta un host de GitHub de manera programática

Terraform

Para conectar tu host de GitHub a Cloud Build mediante el proveedor de Google Terraform, sigue estos pasos:

  1. Instala la app de GitHub de Cloud Build en tu cuenta de GitHub o en una organización de tu propiedad.

  2. Crea un token de acceso personal.

    Asegúrate de configurar tu token para que no tenga fecha de vencimiento y selecciona los siguientes permisos cuando se te solicite en GitHub: repo y read:user. Si tu app está instalada en una organización, asegúrate de seleccionar también el permiso read:org.

    Después de generar tu token de acceso personal, guárdalo en un lugar seguro. Usarás el token generado en los siguientes pasos.

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

  • Configura el proveedor de Google para Terraform

  • Crea un secreto para almacenar tokens de acceso personal de GitHub a fin de otorgar permisos al agente de servicio de Cloud Build a fin de acceder al secreto

  • Crea una conexión de GitHub

    // Configure the terraform google provider
    terraform {
      required_providers {
        google = {}
       }
    }
    
    // Create a secret containing the personal access token and grant permissions to the Service Agent
    resource "google_secret_manager_secret" "github_token_secret" {
        project =  PROJECT_ID
        secret_id = SECRET_ID
    
        replication {
            automatic = true
        }
    }
    
    resource "google_secret_manager_secret_version" "github_token_secret_version" {
        secret = google_secret_manager_secret.github_token_secret.id
        secret_data = GITHUB_PAT
    }
    
    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" {
      project = google_secret_manager_secret.github_token_secret.project
      secret_id = google_secret_manager_secret.github_token_secret.secret_id
      policy_data = data.google_iam_policy.serviceagent_secretAccessor.policy_data
    }
    
    // Create the GitHub connection
    resource "google_cloudbuildv2_connection" "my_connection" {
        project = PROJECT_ID
        location = REGION
        name = CONNECTION_NAME
    
        github_config {
            app_installation_id = INSTALLATION_ID
            authorizer_credential {
                oauth_token_secret_version = google_secret_manager_secret_version.github_token_secret_version.id
            }
        }
        depends_on = [google_secret_manager_secret_iam_policy.policy]
    }
    

Donde:

  • PROJECT_NUMBER es el número de proyecto de Google Cloud.
  • SECRET_ID es el ID de tu token o secreto en Secret Manager.
  • GITHUB_PAT es el ID de tu token de acceso personal en GitHub.
  • PROJECT_ID es tu ID del proyecto de Google Cloud.
  • REGION es la región de tu conexión.
  • CONNECTION_NAME es el nombre de tu conexión de GitHub.
  • INSTALLATION_ID es el ID de instalación de tu app de GitHub de Cloud Build. El ID de instalación se puede encontrar en la URL de tu app de GitHub de Cloud Build. En la siguiente URL, https://github.com/settings/installations/1234567, el ID de instalación es el valor numérico 1234567.

Creaste correctamente una conexión de GitHub.

gcloud

Para conectar tu host de GitHub con un token existente y un ID de instalación obtenido de una conexión anterior, completa los siguientes pasos:

  1. Instala la app de GitHub de Cloud Build en tu cuenta de GitHub o en una organización de tu propiedad.

  2. Crea un token de acceso personal.

    Asegúrate de configurar tu token para que no tenga fecha de vencimiento y selecciona los siguientes permisos cuando se te solicite en GitHub: repo y read:user. Si tu app está instalada en una organización, asegúrate de seleccionar también el permiso read:org.

    Después de generar tu token de acceso personal, guárdalo en un lugar seguro. Usarás el token generado en los siguientes pasos.

  3. Para almacenar tu token en Secret Manager en tu proyecto de Google Cloud, ejecuta el siguiente comando:

        echo -n TOKEN | gcloud secrets create SECRET_NAME --data-file=-
    

    Donde:

    • TOKEN es tu token de acceso personal.
    • SECRET_NAME es el nombre que quieres darle a tu secreto en Secret Manager.
  4. Otorga acceso al agente de servicio de Cloud Build en el secreto, en el que SECRET_NAME es el nombre del secreto tal como se almacena en Secret Manager:

      PROJECT_ID=$(gcloud config list --format="value(core.project)")
      PN=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
      CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
      gcloud secrets add-iam-policy-binding SECRET_NAME \
        --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \
        --role="roles/secretmanager.secretAccessor"
    
  5. Crea tu conexión de GitHub:

      gcloud builds connections create github CONNECTION_NAME \
        --authorizer-token-secret-version=projects/PROJECT_ID/secrets/SECRET_NAME/versions/1  \
        --app-installation-id=INSTALLATION_ID --region=REGION
    

    Donde:

    • CONNECTION_NAME es el nombre de tu conexión.
    • PROJECT_ID es tu ID del proyecto de Google Cloud.
    • SECRET_NAME es el nombre del secreto almacenado en Secret Manager.
    • INSTALLATION_ID es el ID de instalación de tu app de GitHub. El ID de instalación se puede encontrar en la URL de tu app de GitHub de Cloud Build. En la siguiente URL, https://github.com/settings/installations/1234567, el ID de instalación es el valor numérico 1234567.
    • REGION es la región de tu conexión.

Creaste correctamente una conexión de GitHub.

Conecta un repositorio de GitHub

Consola

Para conectar un repositorio de GitHub a una conexión de host, completa los siguientes pasos:

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

    Abrir la página repositorios

    Verás la página Repositorios.

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

  3. Haz clic en Vincular repositorios para vincular repositorios desde tu conexión.

    Verás el panel Conectar repositorios.

  4. En el panel Conectar repositorios, ingresa la siguiente información:

    1. Conexión: Selecciona una conexión del menú desplegable.
    2. Repositorio: Selecciona un repositorio para vincularlo a tu conexión.

    3. Repository Name: Ingresa un nombre para tu repositorio.

      1. Generado (Generated): Selecciona esta opción a fin de que Cloud Build genere nombres de repositorios de forma automática en tu nombre para los repositorios seleccionados.
      2. Manual: Selecciona esta opción a fin de especificar manualmente los nombres para los repositorios seleccionados.

        Si seleccionas Manual, puedes modificar los nombres de los repositorios seleccionados en la sección Nombres de repositorios.

  5. Haz clic en Vincular para vincular tu repositorio a tu conexión.

Acabas de vincular correctamente el repositorio de GitHub a tu conexión.

gcloud

Para agregar un repositorio de GitHub a tu conexión, ingresa el siguiente comando:

   gcloud builds repositories create REPO_NAME \
     --remote-uri=REPO_URI \
     --connection=CONNECTION_NAME --region=REGION

Donde:

  • REPO_NAME es el nombre del repositorio.
  • REPO_URI es el vínculo a tu repositorio de GitHub. Por ejemplo, https://github.com/cloud-build/test-repo.git
  • CONNECTION_NAME es el nombre de tu conexión.
  • REGION es la región de tu conexión.

Ya vinculaste un repositorio a tu conexión de GitHub.

Terraform

Para agregar un repositorio de GitHub a tu conexión, agrega el siguiente fragmento de código a la configuración de Terraform:

    resource "google_cloudbuildv2_repository" "my_repository" {
      project = "PROJECT_ID"
      location = "REGION"
      name = "REPO_NAME"
      parent_connection = google_cloudbuildv2_connection.my_connection.name
      remote_uri = "URI"
  }

Donde:

  • PROJECT_ID es tu ID del proyecto de Google Cloud.
  • REPO_NAME es el nombre de tu repositorio de GitHub.
  • REGION es la región de tu conexión.
  • URI es el URI del host de tu repositorio. Por ejemplo, https://github.com/myuser/myrepo.git

Ya vinculaste un repositorio a tu conexión de GitHub.

¿Qué sigue?