
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Create a Kubernetes cluster
/ 20
Configure and Install Jenkins
/ 20
Create the production and canary deployments
/ 30
Build for the 'new-feature' branch
/ 10
Deploying a canary release
/ 10
Deploying to production
/ 10
En este lab, aprenderás a configurar una canalización de entrega continua con Jenkins
en Kubernetes Engine. Jenkins es el servidor de automatización preferido de los desarrolladores que suelen integrar código en un repositorio compartido. La solución que compilarás en este lab será similar al diagrama siguiente:
En Cloud Architecture Center, consulta Jenkins en Kubernetes Engine para obtener más información sobre la ejecución de Jenkins en Kubernetes.
En este lab, completarás las tareas siguientes para aprender a ejecutar Jenkins en Kubernetes:
Este es un lab de nivel avanzado. Antes de hacerlo, debes conocer, al menos, los conceptos básicos de la programación en shells, así como Kubernetes y Jenkins. Aquí encontrarás algunos labs para ponerte al día:
Cuando estés listo, desplázate hacia abajo para obtener más información sobre Kubernetes, Jenkins y la entrega continua.
Kubernetes Engine es la versión alojada de Google Cloud de Kubernetes
, un potente sistema de organización y administración de clústeres para contenedores. Kubernetes es un proyecto de código abierto que se puede ejecutar en muchos entornos distintos, desde laptops hasta clústeres multinodos de alta disponibilidad, y desde máquinas virtuales hasta equipos físicos. Como se mencionó anteriormente, las aplicaciones de Kubernetes se compilan en contenedores
. Estas aplicaciones son livianas y se empaquetan con todas las dependencias y bibliotecas necesarias para ejecutarlas. Esta estructura subyacente hace que las aplicaciones de Kubernetes tengan una alta disponibilidad y sean seguras y rápidas de implementar; un marco de trabajo ideal para los desarrolladores en la nube.
Jenkins es un servidor de automatización de código abierto que permite organizar de manera flexible canalizaciones de compilación, prueba e implementación. Con Jenkins, los desarrolladores pueden iterar con rapidez en proyectos sin preocuparse por los problemas de sobrecarga que pueden derivar de la entrega continua.
Cuando necesitas configurar una canalización de entrega continua (CD), la implementación de Jenkins en Kubernetes Engine proporciona grandes ventajas en comparación con una implementación estándar basada en VM.
Cuando en tu proceso de compilación haces uso de contenedores, un host virtual puede ejecutar trabajos en varios sistemas operativos. Kubernetes Engine proporciona ejecutores de compilación efímera
que solo se utilizan cuando las compilaciones se ejecutan activamente, lo que deja recursos para otras tareas de clúster, como los trabajos de procesamiento por lotes. Otro beneficio de los ejecutores de compilación efímera es la velocidad: se inician en cuestión de segundos.
Kubernetes Engine también viene equipado con el balanceador de cargas global de Google, que puedes usar para automatizar el enrutamiento del tráfico web a tus instancias. El balanceador de cargas maneja la terminación SSL y usa una dirección IP global que está configurada con la red troncal de Google. Junto con tu frontend web, este balanceador de cargas siempre pondrá a los usuarios en la ruta de acceso más rápida posible a una instancia de aplicación.
Ahora que aprendiste un poco sobre Kubernetes y Jenkins y sobre cómo interactúan en una canalización de CD, es hora de crear una.
Lee estas instrucciones. Los labs cuentan con un temporizador que no se puede pausar. El temporizador, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá un diálogo para que selecciones la forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordena las pestañas en ventanas separadas, una junto a la otra.
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
También puedes encontrar el nombre de usuario en el panel Detalles del lab.
Haz clic en Siguiente.
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
También puedes encontrar la contraseña en el panel Detalles del lab.
Haz clic en Siguiente.
Haz clic para avanzar por las páginas siguientes:
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.
Haz clic para avanzar por las siguientes ventanas:
Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu Project_ID,
gcloud
es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.
Resultado:
Resultado:
gcloud
, en Google Cloud, consulta la guía con la descripción general de gcloud CLI.
Este paso puede tardar varios minutos en completarse. Los permisos adicionales sirven para que Jenkins acceda a Cloud Source Repositories y a Google Container Registry.
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si creaste con éxito un clúster de Kubernetes, verás una puntuación de evaluación.
En este lab, usarás Helm para instalar Jenkins desde el repositorio de gráficos. Helm es un administrador de paquetes que facilita la configuración y la implementación de aplicaciones de Kubernetes. Una vez que instales Jenkins, podrás configurar tu canalización de CI/CD.
Cuando instales Jenkins, puedes usar un archivo values
como plantilla con el objetivo de proporcionar los valores necesarios para la configuración.
Usarás un archivo values
personalizado para configurar automáticamente Kubernetes Cloud y agregar los siguientes complementos necesarios:
Esto permitirá que Jenkins se conecte al clúster y al proyecto de Google Cloud.
La ejecución de este comando puede tardar algunos minutos en completarse.
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si configuraste con éxito un gráfico de Jenkins, verás una puntuación de evaluación.
Running
y que el contenedor tenga el estado READY:Resultado de ejemplo:
Deberías recibir el resultado siguiente:
Resultado de ejemplo:
Estás usando el complemento de Kubernetes para que los nodos compiladores se inicien automáticamente según sea necesario cuando la instancia principal de Jenkins los solicite. Cuando finalices el trabajo, los nodos se apagarán automáticamente, y sus recursos se agregarán de nuevo al grupo de recursos del clúster.
Ten en cuenta que este servicio expone los puertos 8080
y 50000
para cualquier pod que coincida con el selector
. Esto expondrá la IU web de Jenkins y los puertos de registro del compilador y agente dentro del clúster de Kubernetes. Además, el servicio jenkins-ui
se expone a través de un ClusterIP, por lo que no se puede acceder desde fuera del clúster.
admin
y tu contraseña generada automáticamente.Jenkins ya está configurado en tu clúster de Kubernetes y generará las canalizaciones automáticas de CI/CD en las secciones siguientes.
Implementarás la misma aplicación de ejemplo, gceme
, en la canalización de implementación continua. La aplicación está escrita en el lenguaje Go y se encuentra en el directorio sample-app del repo. Cuando ejecutas el objeto binario de gceme en una instancia de Compute Engine, la app muestra los metadatos de la instancia en una tarjeta de información.
La aplicación imita a un microservicio a través de la admisión de dos modos de funcionamiento.
Deberás implementar la aplicación en dos entornos diferentes:
kubectl apply
:Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si creaste implementaciones con éxito, verás una puntuación de evaluación.
De forma predeterminada, solo se implementa una réplica del frontend. Usa el comando kubectl scale
para asegurarte de que haya, al menos, 4 réplicas ejecutándose en todo momento.
Resultado de ejemplo:
Pega la IP externa en un navegador para ver la tarjeta de información que se muestra; deberías ver una página similar a la siguiente:
Confirma que ambos servicios estén funcionando. Para ello, abre la dirección IP externa del frontend en el navegador.
Ejecuta el comando siguiente para comprobar el resultado de la versión del servicio (debe decir “1.0.0”):
Implementaste con éxito la aplicación de ejemplo. A continuación, configurarás una canalización para implementar los cambios de manera continua y confiable.
gceme
y envíala a un repositorio de Cloud Source Repositories con el comando siguiente:Puedes omitir la advertencia; no se te cobrará por este repositorio.
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si creaste con éxito un repositorio de código fuente, verás una puntuación de evaluación.
[EMAIL_ADDRESS]
por tu dirección de correo electrónico de Git y [USERNAME]
por tu nombre de usuario de Git:Configura tus credenciales para permitir que Jenkins acceda al repositorio de código. Jenkins usará las credenciales de la cuenta de servicio de tu clúster para descargar el código del repositorio de Cloud Source Repositories.
En la interfaz de usuario de Jenkins, haz clic en Manage Jenkins en el menú de navegación de la izquierda y haz clic en Security > Credentials.
Haz clic en System.
Haz clic en Global credentials (unrestricted).
Haz clic en Add Credentials en la esquina superior derecha.
Elige Google Service Account from metadata en el menú desplegable Kind y haz clic en Create.
Se agregaron las credenciales globales. El nombre de la credencial es el ID del proyecto
que figura en la sección CONNECTION DETAILS
del lab.
http://cd-jenkins:8080
.cd-jenkins-agent:50000
.Navega a la interfaz de usuario de Jenkins y sigue estos pasos para configurar un trabajo de canalización.
Haz clic en Dashboard > New Item en el panel del lado izquierdo.
Otorga al proyecto el nombre sample-app y, luego, elige la opción Multibranch Pipeline y haz clic en OK.
En la página siguiente, en la sección Branch Sources, selecciona Git en el menú desplegable Add Source.
Pega la HTTPS clone URL del repositorio sample-app en Cloud Source Repositories, en el campo Project Repository. Reemplaza [PROJECT_ID]
por el ID de tu proyecto:
En el menú desplegable Credentials, elige el nombre de las credenciales que creaste cuando agregaste tu cuenta de servicio en los pasos anteriores.
En la sección Scan Multibranch Pipeline Triggers, marca la casilla Periodically if not otherwise run y establece el valor de Interval en 1 minuto.
La configuración del trabajo debería verse de la manera siguiente:
Después de completar estos pasos, se ejecuta un trabajo denominado Branch indexing
. Este metatrabajo identifica las ramas de tu repositorio y garantiza que no se hayan producido cambios en las ramas existentes. Si haces clic en sample-app en la parte superior izquierda, debería verse el trabajo master
.
Creaste con éxito una canalización de Jenkins. A continuación, crearás el entorno de desarrollo para la integración continua.
Las ramas de desarrollo son un conjunto de entornos que los desarrolladores usan para probar los cambios en el código antes de enviarlos con el objetivo de integrarlos en el sitio real. Estos entornos son versiones reducidas de tu aplicación, pero deben implementarse utilizando los mismos mecanismos que el entorno activo.
Para crear un entorno de desarrollo a partir de una rama de funciones, puedes enviar la rama al servidor Git y dejar que Jenkins implemente tu entorno.
El archivo Jenkinsfile
que define esa canalización se escribe con la sintaxis de Groovy para canalizaciones de Jenkins. Si utilizas el archivo Jenkinsfile
, podrás expresar una canalización de compilación completa en un solo archivo que se encuentre junto a tu código fuente. Las canalizaciones admiten funciones potentes como la paralelización y requieren la aprobación manual del usuario.
Para que la canalización funcione como se espera, debes modificar el Jenkinsfile
con el objetivo de configurar el ID de tu proyecto.
vi
) y ejecuta el comando siguiente:Agrega tu PROJECT_ID
al valor REPLACE_WITH_YOUR_PROJECT_ID
. (Tu PROJECT_ID
es el ID de tu proyecto que figura en la sección CONNECTION DETAILS
de este lab. También puedes ejecutar gcloud config get-value project
para encontrarlo.
Cambia el valor de CLUSTER_ZONE
a gcloud config get compute/zone
para obtener este valor.
Jenkinsfile
; para ello, presiona Esc y, luego, ejecuta lo siguiente (para usuarios de vi
):Para demostrar el cambio de la aplicación, cambiarás las tarjetas de gceme de azul a naranja.
html.go
con el comando siguiente:<div class="card blue">
por lo siguiente:html.go
. Para ello, presiona Esc y, luego, ejecuta lo siguiente:main.go
con el comando siguiente:Actualízala a los valores siguientes:
Esto iniciará una compilación de tu entorno de desarrollo.
Después de enviar el cambio al repositorio de Git, navega a la interfaz de usuario de Jenkins, en la que podrás ver que empezó la compilación para la rama new-feature
. Los cambios pueden demorar hasta un minuto en implementarse.
kubectl --namespace=new-feature apply...
para empezar. La rama new-feature se implementará ahora en tu clúster.Si no viste nada en el ejecutor de compilación
, no te preocupes. Solo accede a la página principal de Jenkins > sample app. Verifica que la canalización new-feature
se haya creado.
localhost
y deja que el proxy kubectl
la reenvíe a tu servicio:Debería responder con 2.0.0, que es la versión que ahora se está ejecutando.
Si recibes un error similar a este:
curl
. Continúa cuando obtengas el resultado siguiente:Configuraste el entorno de desarrollo. A continuación, aplicarás lo que aprendiste en el módulo anterior implementando un lanzamiento Canary para probar una función nueva.
Verificaste que tu app está ejecutando el código más reciente en el entorno de desarrollo, así que implementa el código en el entorno de la versión canary.
2.0.0
.Listo. Implementaste un lanzamiento Canary. A continuación, implementarás la versión nueva para producción.
Ahora que el lanzamiento Canary tuvo éxito y no hemos escuchado ninguna queja de los clientes, impleméntalo en el resto de tu flota de producción.
En Jenkins, deberías ver que se inició la canalización de la instancia principal.
1.0.0
, vuelve a ejecutar los comandos anteriores. Para detener este comando, presiona Ctrl + C.Resultado de ejemplo:
También puedes navegar al sitio en el que la aplicación gceme muestra las tarjetas de información. El color de la tarjeta cambió de azul a naranja.
Resultado de ejemplo:
A continuación, se presentan algunas preguntas de opción múltiple para reforzar tus conocimientos sobre los conceptos de este lab. Intenta responderlas lo mejor posible.
¡Listo!
¡Impresionante trabajo! Implementaste con éxito tu aplicación en producción.
Así concluye este lab práctico sobre cómo implementar y trabajar con Jenkins en Kubernetes Engine para habilitar una canalización de entrega continua o implementación continua. Tuviste la oportunidad de implementar una herramienta importante de DevOps en Kubernetes Engine y configurarla para su uso en producción. Trabajaste con la herramienta de línea de comandos kubectl y los parámetros de configuración de implementación en archivos YAML, y aprendiste un poco acerca de cómo configurar las canalizaciones de Jenkins para un proceso de desarrollo o implementación. Con esta experiencia práctica, deberías sentirte capaz de emplear estas herramientas en tu propio taller de DevOps.
Este lab de autoaprendizaje forma parte de las Quests Kubernetes in the Google Cloud, Cloud Architecture y DevOps Essentials. Una Quest es una serie de labs relacionados que forman una ruta de aprendizaje. Si completas esta Quest, obtendrás una insignia como reconocimiento por tu logro. Puedes hacer públicas tus insignias y agregar vínculos a ellas en tu currículum en línea o en tus cuentas de redes sociales. Inscríbete en cualquier Quest que contenga este lab y obtén un crédito inmediato de finalización. Consulta el catálogo de Google Cloud Skills Boost para ver todas las Quests disponibles.
Continúa tu Quest con Hello Node Kubernetes o revisa estos labs de Google Cloud Skills Boost:
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Actualización más reciente del manual: 20 de septiembre de 2023
Prueba más reciente del lab: 20 de septiembre de 2023
Copyright 2025 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.
Este contenido no está disponible en este momento
Te enviaremos una notificación por correo electrónico cuando esté disponible
¡Genial!
Nos comunicaremos contigo por correo electrónico si está disponible
One lab at a time
Confirm to end all existing labs and start this one