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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Maven:Maven es una herramienta de automatización de la construcción que se utiliza principalmente para construir proyectos Java.
Requisitos previos
- Cuenta de AWS (Crea si no tienes una)
- Conocimiento básico de Github.
- Conocimiento básico de Jenkins.
- Conocimiento básico del servidor Linux y sus comandos
¿Qué vamos a hacer?
- Crear una instancia EC2
- Instalar Java
- Instalar Jenkins
- Instalar Apache Tomcat
- Fork de mi Github Repo
- Acceder y configurar Jenkins
- Configurar un trabajo de Jenkins para el despliegue del .war
- Configurar el Webhook en el Repo de Github
- 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.