Este instructivo funciona con repositorios de GitHub públicos y privados. Ten en cuenta que las vistas previas serán públicas, si son ocultas.
Objetivos
- Crear un servicio de Cloud Run
- Implementar la integración continua basada en el control de código fuente en GitHub.
- Crear y administrar el acceso a los secretos a través de Secret Manager
- Implementar un Cloud Builder personalizado
- Crear un activador de Cloud Build para invocar compilaciones cuando se realicen solicitudes de extracción de GitHub
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Build, and Secret Manager APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Build, and Secret Manager APIs.
Roles obligatorios
Si quieres obtener los permisos que necesitas para completar el instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Editor de Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador de Cloud Run (
roles/run.admin
) -
Crea cuentas de servicio (
roles/iam.serviceAccountCreator
) -
Administrador de Secret Manager (
roles/secretmanager.admin
)
Si quieres obtener más información para otorgar roles, consulta Administra el acceso.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Recupera la muestra de código
Para facilitar su uso en este instructivo, crearás un repositorio de GitHub nuevo con una copia de una aplicación Hello World basada en una plantilla. Luego, agregarás un archivo nuevo a este repositorio con la configuración personalizada de Cloud Build.
- Accede a GitHub y navega hasta el repositorio de la plantilla.
- Para crear un repositorio nuevo con esta plantilla, haz clic en “Use this template”.
- Asígnale el nombre
helloworld-python
al repositorio. - Elige “Público” o “Privado” para el repositorio.
- Haz clic en Crear repositorio a partir de una plantilla.
- Asígnale el nombre
Crea un nuevo archivo de configuración de Cloud Build en tu repositorio (instrucciones completas):
- En la página de tu repositorio, haz clic en Add file > Create new file.
- Asígnale el nombre
cloudbuild.yaml
al archivo nuevo. Copia el código que aparece a continuación en
cloudbuild.yaml
:Mantén la selección predeterminada “Commit directly into the
main
branch”.Haz clic en Commit new file.
Implementa el servicio con un activador de compilación
En este instructivo, se muestra cómo configurar un activador de compilación para iniciar automáticamente una compilación cada vez que se actualice la rama principal de tu repositorio. También puedes implementar tu servicio de forma manual invocando a Cloud Build cada vez que quieras implementar un cambio.
En este instructivo, usa el archivo cloudbuild.yaml
para implementar un servicio de muestra llamado myservice
.
Otorga las funciones Administrador de Cloud Run y Usuario de cuenta de servicio a la cuenta de servicio de Cloud Build (instrucciones completas):
En la consola de Google Cloud, ve a la página Configuración de la cuenta de Cloud Build.
Habilita la función Administrador de Cloud Run.
En el cuadro de diálogo de confirmación, haz clic en Otorgar acceso a todas las cuentas de servicio.
Conecta tu cuenta de GitHub a Cloud Build (instrucciones completas):
En la consola de Google Cloud, ve a la página Activadores de Cloud Build.
Haz clic en Conectar repositorio.
Selecciona GitHub (App de GitHub de Cloud Build) como fuente y completa los diálogos de autenticación y autorización.
Selecciona el repositorio "GITHUB_USER_NAME/helloworld-python".
Haz clic en Conectar repositorio.
En “Crear un activador (opcional)”, haz clic en Crear un activador.
Crea un activador de Cloud Build (instrucciones completas):
- En la página Activadores de Cloud Build, haz clic en Crear activador.
- Ingresa los siguientes detalles:
- Nombre:
prod-deploy
- Evento: Envío a la rama
- Repositorio de código fuente: “GITHUB_USER_NAME/helloworld-python”
- Rama de origen:
^main$
- Configuración de compilación: Archivo de configuración de Cloud Build (YAML o JSON)
- Ubicación del archivo de configuración de Cloud Build:
cloudbuild.yaml
- Nombre:
- Haz clic en Crear.
Ejecuta el activador nuevo de forma manual:
- En la lista de activadores nuevos, haz clic en Ejecutar.
- En la ventana emergente, confirma el nombre de la rama (
main
) y haz clic enEjecutar activadores. - Para verificar el progreso de la compilación, ve al historial de Cloud Build.
- Espera a que se complete la compilación.
Confirma que la implementación se haya realizado correctamente.
En la consola de Google Cloud, ve a la página Cloud Run.
Confirma que el servicio tenga una marca de verificación verde, que representa una implementación exitosa.
Haz clic en la pestaña Revisiones y confirma que el servicio tenga una revisión que entregue el 100% del tráfico y comience con “myservice-00001-”.
Haz clic en la URL del servicio y confirma que el servicio muestra el mensaje “Hello World!”.
Crea tokens y opciones de configuración
El activador prod‑deploy creado en la sección anterior implementa el servicio cuando se realiza un envío a la rama principal. Ahora, crearás un segundo activador que se ejecutará cada vez que se cree o actualice una solicitud de extracción en tu repositorio.
Una vez que se configure el activador nuevo, se implementará la vista previa, pero no habrá información en la solicitud de extracción para vincular a la vista previa. Para configurar esta funcionalidad, debes completar los siguientes pasos de configuración adicionales:
- Crea un token de GitHub.
- Almacena este token en Secret Manager.
- Crea una imagen personalizada para usarla como paso en Cloud Build.
Crea y almacena un token de GitHub
- Crea un token de GitHub para permitir la escritura cuando se realice una solicitud de extracción (instrucciones completas):
- Ve a la página de configuración Personal access tokens de GitHub.
- Haz clic en Generate new token.
- Ingresa los siguientes detalles:
- Nota:
preview-deploy
- Vencimiento: 30 días
- Permiso:
- En un repositorio público:
repo:status
(“Acceder al estado de confirmación”) - En el caso de un repositorio privado:
repo
(“control total de repositorios privados”)
- En un repositorio público:
- Nota:
- Haz clic en Generate token.
- Copia el valor del token generado.
Almacena el token de GitHub en Secret Manager:
En la consola de Google Cloud, ve a la página Secret Manager.
Haz clic en Crear secreto.
Ingresa los siguientes detalles:
- Nombre:
github_token
. - Valor secreto: Pega el valor del token que copiaste de GitHub.
- Nombre:
Haz clic en Crear secreto.
Permite que Cloud Build acceda a este secreto:
En una pestaña nueva del navegador, en la consola de Google Cloud, ve a la página Configuración de Cloud Build.
Copia el valor de "Correo electrónico de la cuenta de servicio".
- El correo electrónico es
PROJECT_NUM@cloudbuild.gserviceaccount.com
.
- El correo electrónico es
Regresa a Secret Manager y haz clic en la pestaña Permiso y, luego, en
Agregar.- Principales nuevas:
PROJECT_NUM@cloudbuild.gserviceaccount.com
- Función: Usuario con acceso a secretos de Secret Manager
- Principales nuevas:
Haz clic en Guardar.
GitHub recomienda establecer el vencimiento de los tokens de acceso personales y enviará correos electrónicos de recordatorio cuando los tokens estén configurados para vencer. Si continúas usando vistas previas de implementación, crea una versión nueva de github_token
cuando vuelvas a generar el token. El compilador del siguiente paso recupera la última versión del token para que las vistas previas sigan funcionando.
Crea una imagen nueva para Cloud Build
La secuencia de comandos que escribe la notificación “Deployment Preview” en la solicitud de extracción se encuentra en las muestras de la documentación de Python. En vez de agregar esta secuencia de comandos a tu código fuente, de manera opcional, puedes compilar esta secuencia en un contenedor que pertenezca al proyecto y ejecutar ese contenedor como un paso en la configuración de Cloud Build.
Puedes completar las siguientes instrucciones con Cloud Shell o en tu máquina local si instalaste y configuraste git
y Google Cloud CLI. En las siguientes instrucciones, se indican ambos métodos.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- Configura Google Cloud CLI para usar tu proyecto y reemplaza
PROJECT_ID
por el ID del proyecto: Si usas Cloud Shell, es posible que debas autorizar a Google Cloud CLI para que realice una llamada a la API de Google Cloud. Haz clic en Autorizar para permitir que continúe esta acción.export PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID
- Crea una nueva imagen de contenedor:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples cd python-docs-samples/ gcloud builds submit --tag gcr.io/$PROJECT_ID/deployment-previews run/deployment-previews
- Confirma que se haya creado el contenedor:
gcloud container images list
- Quita el repositorio clonado:
cd .. rm -rf python-docs-samples
Agrega la nueva configuración de Cloud Build
El repositorio ya tiene un archivo cloudbuild.yaml
que se usa en la rama principal. Ahora creará una configuración nueva para este activador nuevo.
En la página del repositorio de GitHub, haz clic en Add file > Create new file.
- Asígnale el nombre
cloudbuild-preview.yaml
al archivo nuevo. - Copia el código que aparece a continuación y pégalo en tu archivo nuevo:
- Asígnale el nombre
Confirma el cambio en la rama principal del repositorio.
Crea el activador secundario
Ahora que sentaste las bases, crea el activador nuevo.
Crea un activador de Cloud Build nuevo (instrucciones completas):
En la consola de Google Cloud, ve a la página Activadores de Cloud Build.
Haz clic en Crear activador.
Ingresa los siguientes detalles:
- Nombre:
preview-deploy
- Evento: solicitud de extracción
- Repositorio de código fuente: “GITHUB_USER_NAME/helloworld-python”
- Rama base:
^main$
- Control de comentarios: Obligatorio excepto para los propietarios o colaboradores
- Como propietario del repositorio, las vistas previas se compilarán automáticamente en las solicitudes de extracción que crees.
- Si quieres permitir que cualquier persona obtenga una vista previa de los cambios, lee la información sobre las implicaciones de seguridad y selecciona "No es obligatorio".
- Configuración: Archivo de configuración de Cloud Build
- Ubicación del archivo de configuración de Cloud Build:
cloudbuild-preview.yaml
- Nombre:
Haz clic en Crear.
Verifica el éxito
Dado que este activador nuevo se activa cuando se crea una nueva solicitud de extracción, deberás crear una solicitud de este tipo para probarla.
- Ve al repositorio y realiza un cambio visual en
app.py
en una rama nueva.- Ve a
app.py
y haz clic en el ícono de lápiz ( ). - Haz un cambio; por ejemplo, cambia "Hola" por "Saludos".
- Selecciona Create a new branch for this commit and start a pull request y, luego, haga clic en Propose change.
- Ve a
Crea una nueva solicitud de extracción con esta rama.
Si el activador se configuró de forma correcta, se mostrará una verificación nueva poco después de crear la solicitud de extracción:
El nombre de la verificación es el nombre del activador y el ID del proyecto. Para verificar el progreso de la compilación, haz clic en Detalles > Ver más detalles de Google Cloud Build.
Si el activador falla y necesitas volver a enviar la compilación, o si deseas realizar otro cambio en la solicitud de extracción, debes confirmar un cambio en la misma rama. Cada confirmación nueva en una solicitud de extracción activará una compilación nueva.
Una vez que se completa el activador, se muestra una verificación de estado nueva llamada “Vista previa de la implementación” para la solicitud de extracción. El ícono que se muestra es tu avatar porque tu cuenta es propietaria del token que se usa:
Haz clic en Detalles para navegar a la vista previa. La URL que se muestra es la misma que la URL de servicio original, pero tiene el prefijo “pr-1---”.
Ten en cuenta que, si navegas a la URL del servicio original, se mostrará el contenido original:
Visualiza la lista de revisiones de tu servicio para verificar el estado del servicio en Cloud Run: ahora hay dos revisiones para entregar tráfico, la original y la vista previa:
Agrega confirmaciones nuevas a la rama para continuar realizando cambios en la solicitud de extracción. Cada vez que realizas una confirmación, se activa el activador
preview-deploy
y este crea una revisión nueva del servicio y la pone a disposición en la misma URL:Una vez que esté todo listo para combinar los cambios, haz clic en Merge Pull Request. Se ejecuta el activador
prod-deploy
original, y los cambios de la solicitud de extracción se reflejan en la URL original:La revisión nueva entrega el 100% del tráfico en la URL principal, pero la URL de vista previa de la solicitud de extracción aún está adjunta a la confirmación más reciente de esa solicitud de extracción, por lo que el vínculo seguirá funcionando:
Limitaciones
Existe un límite para la cantidad de URL de revisiones que se pueden crear. Si esperas que tu repositorio tendrá más de 1,000 solicitudes de extracción, te recomendamos que implementes un proceso para limpiar las etiquetas, como se muestra en cloudbuild-cleanup.yaml
.
Comprende el código
cloudbuild.yaml
Este código se basa en la muestra cloudbuild.yaml
que proporciona Cloud Build, pero con una actualización importante: el cuarto paso que ejecuta update-traffic
.
La configuración de cloudbuild.yaml
realiza cambios en la división del tráfico.
El parámetro --to-latest
ofrece la misma función que la casilla de verificación Aplicar esta revisión inmediatamente de la página Cloud Run. Garantiza que esta revisión del servicio entregue el 100% del tráfico de inmediato.
cloudbuild-preview.yaml
Este código es similar a cloudbuild.yaml
, pero incluye pasos adicionales:
Después de compilar y enviar la imagen de servicio,
cloudbuild-preview.yaml
implementa el servicio mediante la marca--no-traffic
. Esto significa que, aunque esta es la revisión más reciente, no se usa para entregar tráfico.cloudbuild-preview.yaml
agrega una etiqueta personalizada basada en el número de la solicitud de extracción. En este caso, una string con el prefijo “pr-” que termina con el número de la solicitud de extracción.En este punto, la URL de revisión funciona, pero la persona que envió la solicitud de extracción no puede determinar esto porque los registros de Cloud Build no son visibles desde GitHub: solo un vínculo para que los registros sean visibles. Solo los usuarios autenticados del proyecto de Cloud Build con los permisos suficientes pueden ver los registros.
cloudbuild-preview.yaml
ejecuta la secuencia de comandoscheck_status.py
mediante parámetros de sustitución integrados que proporciona Cloud Build. Varios de estos parámetros están disponibles cuando funcionan con repositorios de GitHub, como el número de solicitud de extracción, el nombre del repositorio y el SHA de confirmación.
Para volver a ejecutar este activador, envía otra confirmación en GitHub. Este activador no se puede volver a ejecutar desde la página de Cloud Build en Console.
cloudbuild-cleanup.yaml
Este código es una alternativa a cloudbuild.yaml
, con una función de limpieza agregada. Los pasos iniciales realizan la implementación, y la función se extiende de la siguiente manera:
Con las API de Discovery y de GitHub, determina qué etiquetas del servicio corresponden a solicitudes de extracción cerradas. Como mínimo, estará la solicitud de extracción que se fusionó, que hace que se accione este activador.
Borra las etiquetas identificadas.
check_status.py
La secuencia de comandos check_status.py
toma la información proporcionada sobre el servicio de Cloud Run, el repositorio y la confirmación de GitHub. Luego, realiza las siguientes operaciones:
- Recupera el nombre del servicio, la etiqueta y la URL de revisión con el cliente de la API de Google para Python.
- Recupera el token de GitHub de la variable de entorno que proporciona Secret Manager.
- Crea un estado en la confirmación determinada y vincula a la URL de revisión recuperada mediante una API cliente de GitHub para Python.
Limpia
Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo. Además, deberás borrar las configuraciones de GitHub que se crearon para el instructivo.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra los recursos del instructivo
Usa este comando para borrar el servicio de Cloud Run que implementaste en este instructivo:
- Navega a la consola de Cloud Run.
- Selecciona la ficha "myservice" y haz clic en Borrar.
- En el diálogo de confirmación, haz clic en Borrar.
Borra otros recursos de Google Cloud que creaste en este instructivo:
- Borra la imagen del contenedor deployment‑preview llamada
gcr.io/PROJECT_ID/deployment-preview
de Container Registry. - Borra la imagen del contenedor helloworld llamada
gcr.io/PROJECT_ID/helloworld
de Container Registry. - Borra los activadores de Cloud Build.
- Borra el secreto de Secret Manager.
- Borra la imagen del contenedor deployment‑preview llamada
Borra las configuraciones del instructivo
Para limpiar las configuraciones en GitHub, deberás quitar la aplicación de Google Cloud Build de GitHub:
- Navega a la configuración de la aplicación de GitHub.
- En la ficha Google Cloud Build, haz clic en Configure.
- En la sección Danger Zone, haz clic en Uninstall.
- En el diálogo de confirmación, haz clic en Okay.
También deberás borrar el token de GitHub creado:
- Navega a la página Personal access tokens de GitHub.
- En la lista preview-deploy, haz clic en Borrar.
- En el diálogo de confirmación, haz clic en I understand, delete this token.
También deberás borrar el repositorio de GitHub:
- Navega al repositorio de GitHub que creaste y haz clic en la pestaña Configuración.
- En la sección Danger Zone, haz clic en Delete this repository.
- En el diálogo de confirmación, ingresa el nombre completo del repositorio y haz clic en I understand the consequences, delete this repository.
¿Qué sigue?
- Obtén más información sobre las reversiones, los lanzamientos graduales y la migración de tráfico en Cloud Run.
- Obtén más información sobre los activadores de apps de GitHub en Cloud Build.