Configurar un simple pipeline CI/CD usando Github y Jenkins en una instancia Linux de AWS EC2

En este artículo veremos los pasos para implementar un simple pipeline de CI/CD utilizando Jenkins. Utilizaremos un código Java de ejemplo y desplegaremos ese código en el servidor web Apache Tomcat como un archivo .war. Utilizaremos Maven como herramienta de compilación. Puedes encontrar el código Java de ejemplo en mi repositorio de Github (repo). Antes de continuar, vamos a entender los fundamentos de las herramientas y tecnologías que vamos a utilizar en la configuración de la tubería CI/CD.

  1. Instancia EC2: La instancia EC2 es una máquina virtual (VM) en la nube de AWS. Desplegaremos Apache Tomcat y Jenkins en una instancia EC2.
  2. Apache Tomcat: Apache Tomcat es un servidor web de código abierto. Desplegaremos nuestra aplicación Java de ejemplo en Apache Tomcat como un archivo .war.
  3. Github: Github es una plataforma de alojamiento de código. Es básicamente un sistema de gestión de control de versiones y fuentes. Tendremos nuestro código Java de ejemplo en Github.
  4. Github Webhook: Github Webhook se utiliza para construir y configurar integraciones. Crearemos un webhook que activará un trabajo de Jenkins cada vez que se produzca un nuevo commit en el repo de Github.
  5. Jenkins: Jenkins es una herramienta de automatización gratuita de código abierto. Escribiremos un trabajo en Jenkins que construirá y desplegará un archivo .war del código de la aplicación Java de muestra en el servidor Apache Tomcat.
  6. Maven:Maven es una herramienta de automatización de la construcción que se utiliza principalmente para construir proyectos Java.

Requisitos previos

  1. Cuenta de AWS (Crea si no tienes una)
  2. Conocimiento básico de Github.
  3. Conocimiento básico de Jenkins.
  4. Conocimiento básico del servidor Linux y sus comandos

¿Qué vamos a hacer?

  1. Crear una instancia EC2
  2. Instalar Java
  3. Instalar Jenkins
  4. Instalar Apache Tomcat
  5. Fork de mi Github Repo
  6. Acceder y configurar Jenkins
  7. Configurar un trabajo de Jenkins para el despliegue del .war
  8. Configurar el Webhook en el Repo de Github
  9. Probar la autoconstrucción en cada commit

Crear una VM o una instancia EC2

Para crear una instancia EC2 puedes consultar el documento disponibleaquí.

Aquí he creado una nueva instancia EC2 en mi cuenta de AWS. Esta instancia tiene el sistema operativo Ubuntu 18.

Puedes ver que elinstanciaestá en marcha. Yo utilizaré esta instancia para instalar Java o las dependencias y también Apache Tomcat y Jenkins.

Instalar Java

Para instalar Java en tu sistema Ubuntu 18 puedes utilizar los siguientes comandos. El siguiente comando instalará Java 8. Una vez instalado puedes incluso comprobar su versión.

sudo apt-get update
sudo apt install openjdk-8-jdk
java -version

Instalar Jenkins

Utiliza los siguientes comandos para instalar Jenkins en tu instancia.

sudo apt-get update
wget -q -O – https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add –
sudo sh -c ‘echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list’
sudo apt-get update
sudo apt-get install jenkins

Una vez que hayas instalado Jenkins utiliza el siguiente comando para iniciarlo y comprobar su estado.

sudo systemctl start jenkins #Iniciar Jenkins
service jenkins status#Comprobar el estado de Jenkins

En la siguiente captura de pantalla puedes ver que el servicio Jenkins se ha iniciado. Este servicio Jenkins se ha iniciado en el puerto 8080.

Configurar Apache Tomcat

Instalar Apache Tomcat

Antes de descargar e instalar Apache Tomcat, vamos a crear un directorio donde podamos descargar el paquete de Apache Tomcat.

Utiliza los siguientes comandos para crear un directorio en /opt

cd /opt/
sudo mkdir Innovecture

Cambia la propiedad del directorio con el siguiente comando. Vamos a cambiar la propiedad al usuario Ubuntu y al grupo Ubuntu para que el usuario Ubuntu pueda iniciar el servicio Apache Tomcat y no tengamos que utilizar los privilegios de root o usuario o sudo.

sudo chown -R ubuntu:ubuntu Innovecture
cd Innovecture/

Descarga y extrae Apache Tomcat utilizando los siguientes comandos. Si quieres utilizar cualquier otra versión de Apache Tomcat puedes descargarla y extraerla.

wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
tar -zxvf apache-tomcat-9.0.31.tar.gz
cd apache-tomcat-9.0.31/

Realiza las configuraciones necesarias en Apache Tomcat mediante el siguiente comando. Consulta las siguientes capturas de pantalla para ver las configuraciones que hay que hacer. En las siguientes configuraciones estamos asignando un usuario y una contraseña que se pueden utilizar para iniciar sesión en la aplicación de gestión de Apache Tomcat. Anota este nombre de usuario y contraseña, ya que necesitaremos estas credenciales más adelante.

Configura Apache Tomcat

vim conf/tomcat-users.xml

Consulta la siguiente captura de pantalla y asegúrate de que tu context.xml tiene la misma configuración.

vim webapps/manager/META-INF/context.xml

En server.xml, en el directorio conf, cambia el puerto en el que se ejecuta Apache Tomcat, es decir, cambia el puerto 8080 por el 8090, ya que nuestro servicio Jenkins ya se ejecuta en el puerto 8080.

vim conf/server.xml

Cambia también la configuración de localhost en el archivo server.xml con la IP del servidor para que se pueda acceder a él desde Internet.

Iniciar Apache Tomcat

Utiliza el siguiente comando para iniciar el servicio de Apache Tomcat.

bin/startup.sh

En la siguiente captura de pantalla puedes ver que el servicio Apache Tomcat se está ejecutando en el puerto 8090 y en el puerto 8080 se está ejecutando el servicio Jenkins. Para comprobarlo en tu sistema, utiliza el siguiente comando.

netstat -tulpn

Inicia sesión en la aplicación Tomcat Manager

Para ver si podemos iniciar sesión en la aplicación gestora de Apache Tomcat utilizando las credenciales que hemos especificado anteriormente, pulsa la URL de Apache Tomcat http://IP-of-Apache-Tomcat:8090/manager. Te aparecerá una pantalla de credenciales, simplemente introduce el nombre de usuario ‘tomcat-manager’ y la contraseña que hemos configurado en conf/tomcat-users.xml.

Una vez que te conectes con éxito, verás la siguiente pantalla

Fork Github Repo

Puedes hacer un fork o clonar mi repo mencionado abajo. Este repositorio contiene el código Java de ejemplo, puedes usar este código o si tienes tu propio repositorio puedes usarlo también.

URL del repositorio:https://github.com/shivalkarrahul/Innovecture.git

Acceso y configuración de Jenkins

Para acceder a Jenkins, pulsa la URL http://IP-of-Jenkins:8080.

Sigue las pantallas que te aparecen para desbloquear Jenkin e instalar los plugins sugeridos

Una vez que desbloquees Jenkin e instales los plugins sugeridos, verás la siguiente pantalla.

Tienes que introducir el nombre de usuario y la contraseña que necesitas configurar y hacer clic en guardar y continuar para continuar.

Instalar el plugin de autenticación de Github sin reiniciar

Una vez que hayas accedido con éxito, ve a Gestionar Jenkins > Gestionar Plugins.En la pestaña Disponible pestaña Busca git. Selecciona el plugin «GithubAuthentication» y haz clic en instalar sin reiniciar.

Instalar el plugin de integración de Mavensin reiniciar

De la misma manera, instala el plugin de integración de maven y hazlo sin reiniciar

Instalar el plugin de despliegue en el contenedorsin reiniciar

Para automatizar el despliegue de un archivo .war en Apache Tomcat necesitaríamos un plugin «Deploy to container». Instala el plugin «Deploytocontainer » de la misma manera que instalamos el plugin git y maven.

Configura un trabajo de Jenkins para el despliegue del .war

Ahora es el momento de crear un trabajo de estilo libre. Ve al panel principal y haz clic en crear trabajo. Selecciona el trabajo de estilo libre y sigue adelante.

Añade el Repo de Github en la pestaña General

En la pestaña general marca la casilla «Proyecto Github» y añade la URL de tu repo de código fuente o la URL del repo que has bifurcado de mi repo.

Añade la URL de Github en la pestaña de gestión del código fuente

En la pestaña de gestión del código fuente, haz clic en el botón de opción «Git» y añade la URL del repositorio como se muestra a continuación. Como mi repositorio no es privado y es público no he necesitado añadir las credenciales.

Elige elactivador de gancho de Github

Selecciona «Activador de gancho de GitHub para el sondeo de GitSCM» en la pestaña de Activadores de Construcción

Añade pasos de compilación

En el entorno de compilación haz clic en añadir paso de compilación y selecciona «Invocar objetivos Maven de nivel superior»

Para los objetivos especifica limpiar y empaquetar y guarda el Trabajo.

Probar la construcción

Para probar el trabajo si es capaz de extraer y construir nuestro código, haz clic en Construir ahora.

Añadir acciones dedespliegue después dela construcción

Ahora que estamos seguros de que nuestro código está siendo extraído y construido, estamos listos para añadir una acción post-construcción. Para añadir una acción posterior a la construcción, haz clic en la acción posterior a la construcción en el entorno de construcción y selecciona «Desplegar war en un contenedor».

A continuación, añade la URL del servidor tomcat junto con las credenciales. Para añadir las credenciales haz clic en «Añadir» y sigue los pasos que veas y guarda el Trabajo.

Prueba de la construcción manual

Ahora prueba si nuestro trabajo es capaz de extraer, construir y desplegar el código en el servidor Apache Tomcat. Haz clic en construir ahora para probar nuestro trabajo.

Como puedes ver en la captura de pantalla anterior, la compilación manual ha tenido éxito y se ha desplegado en el servidor Apache Tomcat.

Para comprobar si el war se ha desplegado realmente pulsa el Apache Tomcathttp://IP-of-Apache-Tomcat:8090/manager para acceder a la aplicación del gestor.

Aquí puedes ver que el archivo web_ex. war se ha desplegado en el servidor Apache Tomcat con éxito.

Prueba de la aplicación Java de ejemplo

Para probar si la aplicación Java se está ejecutando pulsa la URLhttp://IP-of-Apache-Tomcat:8090/web_ex.

Configurar el Webhook en la Repo de Github

Crear un webhook

Para crear un webhook en la pestaña visita a su sitio web inicia sesión en tu cuenta y sigue los pasos que se mencionan a continuación.

Ve a la configuración de tu repo, en el panel de la izquierda haz clic en ganchos web y luego haz clic en «Añadir Webhook»

En la URL de la carga útil añade http://Jenkins-URL:8080/github-webhook.

Puedes elegir los eventos que quieres que activen este Webhook o puedes seleccionar «Enviarme todo» si quieres activar el trabajo Jenkins en cada evento, haz clic en actualizar Webhook para guardarlo.

Probar la autoconstrucción en el commit

Ahora estamos listos para probar nuestro trabajo de construcción automática.

Para probar si nuestro trabajo de Jenkins extrae el código de nuestro repositorio de github en cada confirmación, utiliza los siguientes comandos.

Para clonar el repo localmente he utilizado el siguiente comando. Si tienes tu propio repo sólo tienes que ir en él a tu sistema local.

git clone https://github.com/shivalkarrahul/Innovecture.git
cd Innovecture/

Haz algunos cambios en el repositorio para que podamos empujarlos. Aquí, he añadido un nuevo archivo localmente que empujaré en mi repo remoto

toca README.md

Para configurar el nombre de usuario y el correo electrónico para git utiliza los siguientes comandos.

git config user.name «Rahul Shivalkar»
git config user.email «[email protected]»

Para confirmar y enviar tus cambios utiliza los siguientes comandos

git commit -m «Test Commit»
git push

En cuanto empujemos nuestros cambios al repositorio de Github se activará nuestro trabajo Jenkins que hemos añadido en el Webhook de Github.

Puedes ver esto en «Polling Log» del trabajo, consulta la siguiente captura de pantalla para ver lo mismo.

Si vas a la salida de la consola del trabajo puedes ver que el trabajo se ha ejecutado con éxito y el war se ha desplegado en Apache Tomcat.

Vuelve a probar

Ahora cambia el código para comprobar si el último código se despliega o no. Cambiaré el mensaje que se muestra en el navegador.

Si estás utilizando tu propio informe, haz los cambios necesarios en tu código, aquí sólo estoy cambiando un archivo index.jsp de ejemplo que imprime el mensaje en el navegador.

vim src/main/webapp/index.jsp

Ahora vamos a ver si el código cambiado se refleja o no.

Confirma los cambios que has hecho en tu código utilizando los siguientes comandos.

git add src/main/webapp/index.jsp
git commit -m «Código cambiado a Hola Mundo Nuevo»
git push

Pulsa la URL de Apache Tomcathttp://IP-of-Apache-Tomcat:8090/web_ex para acceder a nuestra aplicación de ejemplo.

Puedes ver que el último código se ha construido y desplegado en Apache Tomcat, lo que significa que la aplicación se ha desplegado con éxito y el pipeline también se ha activado con éxito.

Si te fijas, mi código anterior sólo mostraba «¡Hola Mundo!» y ahora, cuando he hecho cambios en mi index.jsp y lo he confirmado, la última aplicación muestra«¡Hola Mundo Nuevo! «.

Conclusión

En este artículo hemos visto los pasos para crear una sencilla canalización CI/CD que puede extraer tu código del repositorio de Github y desplegarlo en el servidor Apache Tomcat en cada confirmación. También hemos visto los pasos para instalar Jenkins, Apache Tomcat, Java y plug-ins en Jenkins.

También te podría gustar...