Base de conocimientos  /  Cloud Application Manager  /  Integrarse con Jenkins
Base de conocimientos  /  Cloud Application Manager  /  Integrarse con Jenkins

Configurar CI/CD con Cloud Application Manager, Jenkins y Bitbucket


Código del artículo: kb/416

Configurar CI/CD con Cloud Application Manager, Jenkins y Bitbucket

El complemento Jenkins para Cloud Application Manager automatiza los procesos de integración continua/implementación continua (CI/CD) en cualquier nube y sistema de gestión de control de código fuente (SCM). En este artículo, utilizamos Bitbucket como el SCM.

Nota: Nota: Para comenzar, necesita un servidor Jenkins con complementos para Bitbucket y Cloud Application Manager.

Para agregar pasos de compilación de Cloud Application Manager en trabajos de Jenkins, vaya a la página de trabajos. En Build (compilación), haga clic en Add Build Step (añadir paso de compilación) y seleccione un paso para implementar, gestionar o actualizar Cloud Application Manager.

En este artículo:

  • Requisitos previos
  • Configuración del entorno de integración continua
  • Reacción a cambios en Bitbucket
  • Ciclo de vida de la solicitud de incorporación de cambios
  • Requisitos previos

Requisitos previos

  1. Necesitará un repositorio de Bitbucket.

    Ejemplo: Ejemplo: en este repositorio, puede encontrar una aplicación web de Java:

    jenkins-bitbucket-1.png

    El repositorio se clonó en el entorno local:

    jenkins-bitbucket-2.png

  2. Necesitará una instancia de Jenkins que esté en funcionamiento.
    En nuestro caso, implementaremos la última versión estable de Jenkins utilizando una casilla creada en Cloud Application Manager. Creamos esta casilla para uso futuro cuando necesitemos aprovisionar un entorno de Jenkins nuevamente. En este punto, lo único que debemos hacer es implementar esta casilla y se configurará una instancia maestra de Jenkins con todas las configuraciones de complemento en minutos.

    jenkins-bitbucket-3.png

  3. Necesitaremos un Apache Tomcat 8.5.

    Para que sea sencillo, decidimos crear una casilla de tomcat en Cloud Application Manager para implementar el servidor apache tomcat.

    jenkins-bitbucket-4.png

Configuración del entorno de integración continua

El objetivo es demostrar cuán fácil es configurar un entorno de integración continua utilizando Jenkins, el complemento Jenkins para Cloud Application Manager y Bitbucket como repositorio.

A continuación, se muestra un diagrama del flujo de trabajo y el funcionamiento de todos los componentes juntos.

jenkins-bitbucket-5.png

  1. Configure la instancia de Jenkins (en nuestro caso, implementaremos la casilla que creamos anteriormente).

    • Implemente la casilla.

    jenkins-bitbucket-6.png

    • Elija la casilla para políticas de implementación.

    jenkins-bitbucket-7.png

    • Implementada.
  2. Configure la nube de Cloud Application Manager en la sección Manage Jenkins (gestionar Jenkins).

    jenkins-bitbucket-8.png

    • En la sección Cloud (nube), añadimos la nube de Cloud Application Manager:

    jenkins-bitbucket-9.png

  3. Cree un trabajo de Jenkins para ver todos los componentes juntos.

    jenkins-bitbucket-10.png

  4. Ahora, configuraremos el trabajo:

    jenkins-bitbucket-11.png

  5. En la sección Source Code Management (gestión de código fuente), debemos configurar el repositorio de Bitbucket (Git debe estar instalado en el nodo de Jenkins):

    jenkins-bitbucket-12.png

    En este caso, la URL será: https://cgarciadelpozo@bitbucket.org/oserna/hello-world-war.git
    Introduzca sus credenciales para acceder al repositorio.

    jenkins-bitbucket-13.png

  6. En la sección Build (compilación), agregamos un paso de compilación Deploy Box (implementar casilla) para implementar nuestra casilla de Tomcat creada anteriormente.

    jenkins-bitbucket-14.png

    jenkins-bitbucket-15.png

    En el esquema anterior, seleccionamos la casilla de Tomcat con su versión más reciente. También agregamos la etiqueta "tomcat" a esa instancia para ubicarla fácilmente en nuestra nube. En este caso, hemos seleccionado la implementación de esta casilla en el Google Compute Engine (GCE) utilizando la siguiente casilla para políticas de implementación:

    jenkins-bitbucket-16.png

  7. Ahora, una vez que hayamos configurado la casilla de Tomcat que se implementará, debemos compilar el código fuente que descargamos anteriormente del repositorio de Bitbucket. Utilizando un trabajo de Jenkins estilo libre, y no un trabajo de Jenkins estilo maven, crearemos un paso de compilación de script de shell:

    jenkins-bitbucket-17.png

    Apache Maven debe estar instalado y agregado a la ruta para ejecutar la orden:

        mvn clean install
    

    Como habrá observado, el último comando en el shell implementa el paquete war recién creado en Tomcat.

    curl -v -T ${artifact} 'http://manager:manager@'${tomcat_host}':'${tomcat_port}'/manager/text/deploy?path=/'${context_path}''
    
  8. Veamos cómo funciona:

    • El trabajo obtiene el código del repositorio:

    jenkins-bitbucket-19.png

    • En el próximo paso, el trabajo implementa la casilla de tomcat.

    jenkins-bitbucket-20.png

    • Ahora el trabajo ejecuta la compilación.

    jenkins-bitbucket-21.png

    jenkins-bitbucket-22.png

    • Observe que finalmente implementa el paquete war en el servidor Tomcat.

    jenkins-bitbucket-23.png

    • ¡Y funciona!

    jenkins-bitbucket-24.png

  9. Todos los componentes juntos.

    jenkins-bitbucket-25.png

  10. Tomcat implementado con el complemento de Jenkins para Cloud Application Manager.

    jenkins-bitbucket-26.png

Reacción a cambios en Bitbucket

En el caso anterior, nos dedicamos a configurar nuestro entorno de integración continua. Comenzamos a usar Jenkins, Bitbucket y el complemento de Jenkins para Cloud Application Manager, y hasta ahora estamos bastante conformes. Nuestro próximo objetivo es configurar un webhook de servicio de Bitbucket para activar nuestras compilaciones.

jenkins-bitbucket-27.png

En el trabajo que creamos al configurar nuestro entorno de integración continua, habilitaremos las notificaciones cuando se hace algún cambio en el repositorio de Bitbucket. Lo hacemos en la sección Build Triggers (activadores de compilación) en la página de configuración de trabajos.

jenkins-bitbucket-28.png

Ahora debemos hacer los cambios correspondientes para habilitar los webhooks del repositorio de Bitbucket. Agregar webhooks que apuntan a nuestro servidor Jenkins CI.

jenkins-bitbucket-29.png

Hacemos un cambio en nuestro código fuente (clonado anteriormente del repositorio) dentro de un entorno local por una nueva etiqueta de párrafo en HTML.

jenkins-bitbucket-30.png

Una vez realizado el cambio (la función), lo confirmamos en nuestro repositorio local y se envía el cambio al repositorio remoto de Bitbucket.

jenkins-bitbucket-31.png

jenkins-bitbucket-32.png

Después de la inserción en el repositorio de Bitbucket, el trabajo se activa.

jenkins-bitbucket-33.png

Confirmaremos que el resultado es lo que esperábamos, que el paquete se creó y que se implementó en el servidor de Tomcat correctamente.

jenkins-bitbucket-34.png

Podemos ver que nuestro cambio está listo para ser probado. ¡Sí! Nuestro nuevo párrafo está allí.
Vea la página hello world desde Tomcat.

jenkins-bitbucket-35.png

Tan solo conocer los cambios de inserción en su repositorio ofrece muchas posibilidades de gestión, según el tipo de flujo de trabajo de desarrollo en su compañía. Debe decidir qué webhooks activarán los trabajos de Jenkins. Los casos en que todos los eventos de inserción pueden activar un trabajo de Jenkins o insertan actividades específicas en una rama específica dependen realmente de su flujo de trabajo de desarrollo, y se pueden personalizar según su negocio. Como podrá imaginar, el evento de inserción es la forma más simple, pero más detallada, de manejar un evento. Por ejemplo, veamos el siguiente flujo de trabajo de Git clásico:

jenkins-bitbucket-36.png

Suponiendo que utiliza una rama que funciona como una rama de integración para características (esta es la rama púrpura en el esquema anterior), tal vez baste con ser notificado sobre las inserciones en la rama de integración (desde la perspectiva de Jenkins). Un trabajo de Jenkins se activaría cada vez que se agrega una nueva confirmación a la rama de integración. El trabajo también podría enviar un email a quien quiera ser notificado sobre los resultados de compilación u otras acciones que el trabajo pueda hacer. Sin embargo, mejores modelos de integración serían más eficaces si pudiésemos conocer (en Jenkins) las distintas fases del ciclo de vida de la solicitud de incorporación de cambios. Veamos este proceso a continuación.

Ciclo de vida de la solicitud de incorporación de cambios

Como ya sabrá, las solicitudes de incorporación de cambios son una herramienta para que los desarrolladores notifiquen al resto del equipo cuando se completa una nueva función. De este modo, todos saben que deben revisar el código antes de fusionarlo de la rama de características a la rama maestra. Entonces, está bien conocer todas las confirmaciones en el repositorio, como vimos en el capítulo anterior, pero si podemos compilar solicitudes de incorporación de cambios desde Bitbucket e informar los resultados de la prueba, eso sería mucho mejor. A continuación, puede ver el ciclo de vida de la solicitud de incorporación de cambios como parte de nuestra visión sobre cómo se puede implementar CI y CD.

jenkins-bitbucket-37.png

En la imagen a continuación, puede ver la implementación más simple del ciclo anterior, que será el ejemplo que utilizaremos en esta configuración.

jenkins-bitbucket-38.png

Existen varias maneras de lograr este tipo de integración, según el mecanismo que se emplee, ya sea de sondeo o inserción, y el tipo de repositorio que utilice, servidor de Stash o Bitbucket.

Revise las páginas wiki para conocer el modo más simple de utilizar estos complementos de Jenkins juntos:

En este caso, nuestro servidor Jenkins sondeará el repositorio de Bitbucket según el intervalo que elegimos. Creamos un trabajo de Jenkins para demostrar cómo funciona este método que configurará el SCM, como se ve en la sección a continuación:

jenkins-bitbucket-39.png

También debemos configurar la parte relacionada con el compilador de solicitud de incorporación de cambios en la sección "Build Triggers" (activadores de compilación):

jenkins-bitbucket-40.png

Una vez que hayamos configurado nuestros complementos, veremos el resultado desde la perspectiva de Bitbucket. Entonces, cada vez que creamos una nueva característica en una nueva rama, creamos la confirmación 1 que contiene "master_branch_feature_2":

jenkins-bitbucket-41.png

Al crear la solicitud de incorporación de cambios en Bitbucket, esto es lo que veremos:

jenkins-bitbucket-42.png

La confirmación por dentro:

jenkins-bitbucket-43.png

Observe que la compilación se activó por la confirmación 1.

jenkins-bitbucket-45.png

La rama verificada es la master_branch_feature_2.

jenkins-bitbucket-46.png

Y, al finalizar la compilación, verá el resultado en Bitbucket.

jenkins-bitbucket-47.png

La notificación del resultado de compilación:

jenkins-bitbucket-48.png

Para que sea más simple, decidimos usar la combinación de complementos que vio más arriba, pero existen otras maneras de integrar Bitbucket y Jenkins.

Puede ver todos los detalles aquí.

Comunicarse con soporte de Cloud Application Manager

Lamentamos que esté teniendo problemas en el Gestor de aplicaciones en la nube. Revise los consejos para solucionar problemas o comuníquese con soporte de Cloud Application Manager para proporcionar detalles y capturas de pantalla de ser posible.

Para problemas relacionados con las llamadas API, envíe el cuerpo de la solicitud junto con los detalles del problema.

En el caso de error de casilla, comparta la casilla en el espacio de trabajo en el que su organización y Cloud Application Manager pueden ingresar y adjunte los registros.

  • Linux: SSH y busque el registro en /var/log/elasticbox/elasticbox-agent.log
  • Windows: Windows: RDP dentro de la instancia para ubicar el registro en ProgramData/ElasticBox/Logs/elasticbox-agent.log
Powered by Translations.com GlobalLink OneLink SoftwarePowered By OneLink