paint-brush
Creación de una canalización de CI/CD con AWS, K8S, Docker, Ansible, Git, Github, Apache Maven y Jenkinspor@zufarexplained
38,449 lecturas
38,449 lecturas

Creación de una canalización de CI/CD con AWS, K8S, Docker, Ansible, Git, Github, Apache Maven y Jenkins

por Zufar Sunagatov46m2023/09/07
Read on Terminal Reader

Demasiado Largo; Para Leer

Aprenda a crear una canalización de CI/CD avanzada con AWS, K8S, Docker, Ansible, Apache Maven, Git, Github y Jenkins con Zufar Sunagatov. Al final de este tutorial, obtendrá una canalización de CI/CD moderna lista para usar que es aplicable a cualquiera de sus proyectos en Github.
featured image - Creación de una canalización de CI/CD con AWS, K8S, Docker, Ansible, Git, Github, Apache Maven y Jenkins
Zufar Sunagatov HackerNoon profile picture
0-item
1-item




En mi artículo anterior, profundicé en el fascinante mundo de los microservicios: Patrones de arquitectura de microservicios, Parte 1: Patrones de descomposición . Este fue el comienzo de mi completa serie de artículos sobre microservicios y sus patrones.


Si bien el paso lógico sería continuar con la Parte 2 de esta serie, he decidido que lo siguiente que me gustaría explorar y contarles es el proceso vital de entregar estos microservicios al usuario final sin problemas.


Descripción general del contenido

  • Motivación
  • [Módulo 1]: Servidor virtual AWS EC2
  • [Módulo 2]: Servidor Jenkins
  • [Módulo 3]: Git y Github
  • [Módulo 4]: Apache Maven
  • [Módulo 5]: Docker
  • [Módulo 6]: Ansible
  • [Módulo 7]: Kubernetes
  • Conclusión
  • Sobre el Autor



Motivación

CI/CD es una técnica para entregar aplicaciones a los clientes, que se logra agregando automatización a diferentes etapas del desarrollo de aplicaciones. Creo que comprender CI/CD (integración continua e implementación continua) puede permitir a los desarrolladores obtener una mejor comprensión de cómo existen los artefactos del proyecto backend más allá de los límites del repositorio del proyecto. Esta comprensión también puede crear un cambio fundamental en la perspectiva del desarrollador. En lugar de simplemente ver su trabajo como líneas de código, pueden empezar a adoptar el contexto más amplio de su proyecto como un producto valioso.


En este artículo, nuestro objetivo es desmitificar el proceso de CI/CD a través de una aplicación práctica. Lo guiaremos a través de un tutorial paso a paso, desglosándolo módulo por módulo, donde creará una canalización de CI/CD manualmente. Para hacer esto, aprovecharemos el poder de las herramientas DevOps contemporáneas como AWS, Docker, Kubernetes, Ansible, Git, Apache Maven y Jenkins . Entonces, ¡comencemos este viaje!


[Módulo 1]: Servidor virtual AWS EC2

Este módulo está dedicado a la creación de una instancia de servidor virtual AWS EC2. Como parte de este artículo, configurará tres instancias EC2 para Jenkins, Ansible y Kubernetes. Por ahora, puede continuar con los siguientes módulos y volver a visitar este módulo en las secciones "[módulo 2]: Jenkins", "[módulo 6]: Ansible" y "[módulo 7]: Kubernetes".


Paso 1: cree una cuenta de AWS

Vaya a https://aws.amazon.com.

Haga clic en el botón Crear una cuenta de AWS .


La captura de pantalla de la página web principal de AWS con el puntero al botón "Crear una cuenta de AWS"


Siga las instrucciones en la página web para crear una cuenta.


Paso 2: inicie sesión en su cuenta de AWS

Vaya a https://console.aws.amazon.com/console/home. Haga clic en el botón Iniciar sesión .

La captura de pantalla de la página web principal de AWS con el puntero al botón "Iniciar sesión"


Ingrese todas las credenciales necesarias en esta página web.


Paso 3: busque el servidor virtual EC2

Busque EC2 en el cuadro de búsqueda.

La captura de pantalla de la página web de AWS con el puntero al cuadro de búsqueda


Elija Servidor virtual EC2 haciendo clic en Servicio EC2 .

La captura de pantalla de la página web de AWS con el puntero al servicio AWS "EC2"


Haga clic en el botón Iniciar instancia .

La captura de pantalla de la página web de AWS con el puntero al botón "Iniciar instancia"


Paso 4: Configurar la sección “Nombre y etiquetas”

Vaya a la sección "Nombre y etiquetas" .

La captura de pantalla de la página web de AWS con el puntero a la sección "Nombre y etiquetas"


Proporcione un nombre para una nueva instancia del servidor virtual AWS EC2 en la sección "Nombre" .

La captura de pantalla de la página web de AWS con el puntero al cuadro de entrada "Nombre" en la sección "Nombre y etiquetas"


También puede agregar etiquetas adicionales para su servidor virtual haciendo clic en "Agregar etiquetas adicionales" .


Paso 5: Configure la sección "Imágenes de aplicaciones y sistemas operativos (imagen de máquina de Amazon)"


Vaya a la sección "Imágenes de aplicaciones y sistema operativo (imagen de máquina de Amazon)" .

La captura de pantalla de la página web de AWS con el puntero a la sección "Imágenes de aplicaciones y sistemas operativos (imagen de máquina de Amazon)"


Para jugar con el servidor virtual GRATIS :

  1. Seleccione el sistema operativo para su servidor virtual: Amazon Linux .
  2. En la sección Imagen de máquina de Amazon (AMI) , seleccione una máquina con la etiqueta elegible para el nivel gratuito .



La captura de pantalla de la página web de AWS con el puntero a los botones "SO" y "Tipo de máquina" en la sección "Imágenes de aplicación y sistema operativo (imagen de máquina de Amazon)"


Paso 6: Configurar la sección "Tipo de instancia"

Vaya a la sección "Tipo de instancia" .

La captura de pantalla de la página web de AWS con el puntero a la sección "Tipo de instancia"


Para jugar con el servidor virtual GRATIS :

Seleccione un tipo con la etiqueta elegible para el nivel gratuito en la sección Tipo de instancia .

Para mí es t2.micro (Familia: t2 1cCPU 1 GiB Memoria Generación actual: verdadero) .



La captura de pantalla de la página web de AWS con el puntero al menú desplegable "Tipo de instancia" en la sección "Tipo de instancia"


Paso 7: Configurar la sección "Configurar almacenamiento"

Vaya a la sección "Configurar almacenamiento" .

La captura de pantalla de la página web de AWS con el puntero a la sección "Configurar almacenamiento"


Para jugar con el servidor virtual GRATIS :

No cambie la configuración predeterminada. Los clientes elegibles para el nivel gratuito pueden obtener 30 GB de almacenamiento magnético o de uso general (SSD) de EBS .



La captura de pantalla de la página web de AWS con el puntero a las posibles configuraciones de almacenamiento en la sección "Configurar almacenamiento"


Paso 8: Configurar la sección "Configuraciones de red"

Vaya a la sección "Configuración de red" .

La captura de pantalla de la página web de AWS con el puntero a la sección "Configuración de red"


Necesita configurar la seguridad de su servidor virtual. Para hacer esto,

  1. Haga clic en el botón "Crear grupo de seguridad" .
  2. Agregue el nombre de su nuevo grupo de seguridad en la sección "Nombre del grupo de seguridad" .
  3. Agregue una descripción de su nuevo grupo de seguridad en la sección "Descripción" .

De forma predeterminada, se puede acceder a su servidor virtual a través de ( Tipo: SSH, Protocolo: TCP, Puerto: 22 ). Si necesita tipos de conexión adicionales, agréguelos agregando reglas de grupo de seguridad entrante adicionales.



La captura de pantalla de la página web de AWS con el puntero a "Grupo de seguridad" en la sección "Configuración de red"


Paso 9: Configurar la sección "Par de claves (iniciar sesión)"

Vaya a la sección "Par de claves (Iniciar sesión)" .

La captura de pantalla de la página web de AWS con el puntero a la sección "Ket pair (iniciar sesión)"


Cree un nuevo par de claves si aún no lo ha creado.

La captura de pantalla de la página web de AWS con el puntero a "Nombre del par de claves", "Tipo de par de claves", "Formato de archivo de clave privada" en la sección "Par Ket (inicio de sesión)"


Si aún no ha creado un "par de claves" :

  1. Haga clic en el botón "Crear nuevo par de claves" .
  2. Asigne un nombre a su nuevo par de claves en la sección "Nombre del par de claves" .
  3. Seleccione el tipo de par de claves RSA o ED25519 . Elijo el tipo RSA .
  4. Seleccione Formato de archivo de clave privada. Elección de .pem y .ppk . Elijo el formato .pem .
  5. Haga clic en el botón "Crear par de claves" .
  6. Aparecerá una ventana emergente que le pedirá que descargue el archivo de clave privada. Acepta y descarga el archivo a tu computadora.

Paso 10: Inicie la instancia del servidor virtual EC2


Inicie la instancia del servidor virtual EC2 haciendo clic en el botón "Iniciar instancia" .

La captura de pantalla de la página web de AWS con el puntero al botón "Iniciar instancia"


Después de completar el proceso de creación de la instancia del servidor virtual EC2, verá lo siguiente.


La captura de pantalla de la página web de AWS que muestra una notificación de "Éxito", que indica la finalización exitosa del proceso de creación de la instancia del servidor virtual EC2.


Luego debe ir a la sección "Instancias" haciendo clic en el botón "Ver todas las instancias" .


La captura de pantalla de la página web de AWS con el puntero para ejecutar la instancia EC2

Ahora puede ver que su instancia del servidor virtual AWS EC2 se está ejecutando.



[Módulo 2]: Servidor Jenkins

Ahora, configuremos JenkinsServer en la instancia del servidor virtual EC2.

Paso 1: crear una instancia de servidor virtual AWS EC2

Necesita un servidor virtual para ejecutar Jenkins.

Siga las instrucciones de la sección [Módulo 1]: Servidor virtual AWS EC2 de este tutorial para finalizar este paso y crear una instancia de servidor virtual EC2 con el nombre JenkinsServer.

No olvide agregar una configuración de grupo de seguridad. Permite que Jenkins y SSH funcionen en los puertos 8080 y 22 respectivamente.


Utilice el nombre "JenkinsServer" para distinguir su instancia de servidor virtual EC2.

Cree el grupo de seguridad "CI_CD_Pipeline" y "CI_CD_Pipeline_Key_Pair" para una nueva instancia AWS EC2 "JenkinsServer" . Puede reutilizarlos más adelante en el artículo.


Paso 2: Conéctese a una instancia del servidor virtual AWS EC2

Vaya a la página de inicio de la Consola de AWSPanel de la Consola de administración EC2Instancias.

Luego debes elegir JenkinsServer y luego hacer clic en el botón "Conectar" .

La captura de pantalla de la página web "Instancias" de AWS con el puntero al botón "Conectar"


Entonces verá esta página web. Debes volver a hacer clic en el botón "Conectar" .

La captura de pantalla de la página web "Conectar a la instancia" de AWS con el puntero al botón "Conectar"


Ahora puede ver la terminal en línea de la instancia del servidor virtual EC2.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2


Paso 3: descargue el repositorio de Jenkins

Ahora necesita descargar Jenkins en su instancia de servidor virtual EC2.

Siga estas instrucciones:


  1. Vaya a la página web de descarga de Jenkins.

  2. Puede ver las opciones de lanzamientos estables (LTS) y regulares (semanales). Elija la opción Red Hat/Fedora/Alma/Rocky/CentOS LTS.


Verá esta página web.

La captura de pantalla de la página web de descarga de Jenkins.


  1. Copie el comando “sudo get…” y ejecútelo para descargar archivos Jenkins del repositorio de Jenkins en Internet y guárdelos en la ubicación especificada en su instancia de servidor virtual EC2.
 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

Ahora Jenkins está descargado.


Paso 4: importar la clave de Jenkins

Para finalizar la instalación de Jenkins, necesitamos importar la clave de Jenkins.

Para importar la clave de Jenkins necesitamos copiar el comando "sudo rpm..." y ejecutarlo.


 sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

De esta manera, el administrador de paquetes “rpm” puede verificar que los paquetes de Jenkins que instala son exactamente los publicados por el proyecto Jenkins y que no han sido manipulados ni dañados.


Paso 5: instale Java

Para ejecutar Jenkins, necesitamos instalar Java en nuestra instancia de servidor virtual EC2.

Para instalar Java , utilice este comando.


 sudo amazon-linux-extras install java-openjdk11 -y


Verifique si Java se instaló correctamente usando este comando:

 java -version


Verás algo así.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2 con JDK 11 instalado


Paso 6: instale fontconfig

Para ejecutar Jenkins, necesita instalar fontconfig en nuestra instancia de servidor virtual EC2.

Utilice este comando.

 sudo yum install fontconfig java-11-openjdk -y


Fontconfig es una biblioteca diseñada para proporcionar configuración de fuentes, personalización y acceso a aplicaciones en todo el sistema. Jenkins lo requiere porque Jenkins tiene características que representan fuentes.


Paso 7: instale Jenkins

En pasos anteriores, configuró su instancia de servidor virtual EC2 para usar un repositorio Jenkins específico y luego importó la clave GPG asociada con este repositorio. Ahora, debe ejecutar el comando que buscará en todos los repositorios que conoce, incluido el de Jenkins que agregó, para encontrar el paquete de Jenkins. Una vez que encuentre el paquete Jenkins en el repositorio de Jenkins, lo descargará e instalará.


Ejecutemos este comando.

 sudo yum install jenkins -y


Paso 8: inicie Jenkins

Puede iniciar Jenkins usando este comando.

 sudo systemctl start jenkins


Para comprobar que Jenkins se está ejecutando, utilice este comando.

 sudo systemctl status jenkins


Verá el resultado tal como está en la siguiente captura de pantalla:

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2 con Jenkins instalado


Jenkins ahora debería estar en funcionamiento.

Paso 9: acceda a Jenkins

Para acceder a la aplicación Jenkins, abra cualquier navegador web e ingrese la dirección IP pública o el nombre de dominio de su instancia EC2 seguido del puerto 8080.


 http://<your-ec2-ip>:8080


La primera vez que acceda a Jenkins, se bloqueará con una contraseña generada automáticamente.

La captura de pantalla de Jenkins instalado en el servidor virtual AWS EC2 con el puntero a la contraseña de administrador


Debe mostrar esta contraseña usando el siguiente comando.

 sudo cat /var/lib/jenkins/secrets/initialAdminPassword


Copie esta contraseña, regrese a su navegador, péguela en el campo Contraseña de administrador y haga clic en "Continuar".


Entonces podrás ver esta página web.


La captura de pantalla de Jenkins instalado en el servidor virtual AWS EC2 con el puntero a la página web "Personalizar Jenkins"


Ahora puede utilizar su servidor Jenkins.


Paso 10: crear una nueva canalización de Jenkins

Ahora, como Jenkins funciona bien, puede comenzar a crear la canalización de Jenkins. Para crear una canalización de Jenkins, debe crear un nuevo "proyecto de estilo libre". Para crear un nuevo "proyecto de estilo libre", debe ir al panel de Jenkins y hacer clic en el botón "Nuevo elemento" .


La captura de pantalla de la página web del Panel de Jenkins con el puntero al botón "Nuevo elemento"


Ingrese el nombre del “proyecto Freestyle” de Github (el nombre de “pipeline” se usará más adelante) y luego haga clic en el botón “Aceptar” .


La captura de pantalla de la página web Nuevo elemento de Jenkins con el puntero al cuadro de elemento "Nombre del elemento"


Luego proporcione la descripción de la tubería.

La captura de pantalla de la página web de configuración de trabajos de Jenkins con el puntero al cuadro de entrada "Descripción"


Luego haga clic en el botón “Aplicar” y “Guardar”. Después de eso, significa que creó los fundamentos de la canalización que se construirá en este tutorial.



[Módulo 3]: Git y Github

Ahora que Jenkins se ejecuta en la instancia del servidor virtual AWS EC2, puede configurar Git con la canalización.

Git es un sistema de control de versiones distribuido (VCS) gratuito y de código abierto diseñado para ayudar a los equipos de software a realizar un seguimiento de cada modificación del código en un tipo especial de base de datos. Si se comete un error, los desarrolladores pueden retroceder el tiempo y comparar versiones anteriores del código para ayudar a corregir el error y minimizar las interrupciones para todos los miembros del equipo. VCS es especialmente útil para DevOps equipos ya que les ayudan a reducir el tiempo de desarrollo y aumentar las implementaciones exitosas [1].

Git, como sistema de control de versiones más popular, nos permite extraer el código más reciente del repositorio Github de su proyecto a su instancia de servidor virtual EC2 donde está instalado Jenkins.


Paso 1: instalar Git

Utilice este comando para instalar Git.

 sudo yum install git -y


Ahora verifique que Git esté funcionando, usando este comando.

 git --version

Ahora Git está funcionando bien en la instancia del servidor virtual EC2.


Paso 2: abra el panel de Jenkins

Como Git funciona bien en la instancia del servidor virtual EC2, ahora podemos integrar Jenkins con Git.

Para iniciar esta integración, instalemos el complemento Jenkins Github.

Vaya a la sección del panel de Jenkins.


La captura de pantalla del panel de Jenkins.


Paso 3: abra el Administrador de complementos de Jenkins

Haga clic en el botón "Administrar Jenkins" y luego haga clic en el botón "Administrar complementos" .

La captura de pantalla del panel de Jenkins con el puntero al botón "Administrar complementos"


Paso 4: busque el complemento Github Jenkins

Haga clic en el botón "Complementos disponibles" .

La captura de pantalla de la página web de Jenkins Plugin Manager con el puntero al botón "Complementos disponibles"


Busque el cuadro de búsqueda del complemento Github .


La captura de pantalla de la página web de Jenkins Plugin Manager con el puntero al complemento "Github"


Seleccione el complemento Github .


Paso 5: instale el complemento Github Jenkins

Seleccione el complemento Github . Y luego haga clic en el botón “Instalar sin reiniciar” .


La captura de pantalla de la página web de Jenkins Plugin Manager con el puntero al botón "Instalar sin reiniciar"


Espere a que finalice la descarga del complemento Github.


La captura de pantalla de la página web de Jenkins Plugin Manager con la descarga del complemento Github


¡Sí! El complemento Jenkins Github está instalado.


Paso 6: Configurar el complemento Github Jenkins

Ahora que el complemento GitHub Jenkins está instalado, puede configurar este complemento para integrar finalmente Jenkins con Git. Para hacerlo, debe regresar a la página principal haciendo clic en el botón "Volver a la página principal".


La captura de pantalla de la página web de Jenkins Plugin Manager con el puntero al botón "Volver a la página principal"


Luego, en la página principal, debe hacer clic en el botón "Administrar Jenkins" y luego hacer clic en el botón "Configuración global de herramientas" .


La captura de pantalla de la página web de Jenkins Plugin Manager con el puntero al botón "Configuración global de herramientas"


Luego en la página web de Configuración Global de Herramientas debes ir a la sección Git.


La captura de pantalla de la página web de configuración global de herramientas de Jenkins con el puntero a los cuadros de entrada "Nombre" y "Ruta al ejecutable de Git"


En la sección Git, debe configurar Git proporcionando el nombre y la ruta a Git en la computadora.


Luego haga clic en los botones “Aplicar” y “Guardar” **.**


Aquí ha terminado de configurar el complemento Jenkins Github.


Paso 7: integrar Git en el proceso

Ahora, una vez instalado y configurado el complemento Jenkins Github, podrá utilizar este complemento dentro de su canalización. Esto permitirá que la canalización que creó en el módulo 2 extraiga el código de su proyecto del repositorio de GitHub especificado.


Bueno, para integrar este complemento en su canalización, debe ir a la sección Administración de código fuente y elegir Git en su canalización. Luego debe proporcionar la URL del repositorio de su proyecto. Si el repositorio de su proyecto es público en Github, no necesita proporcionar credenciales. Si el repositorio del proyecto es privado en Github, debes proporcionar credenciales.


La captura de pantalla de la página web de configuración de trabajos de Jenkins con la configuración de "Administración de código fuente"


Puedes usar mi proyecto con la siguiente URL del repositorio: https://github.com/Sunagatov/Hello.git .

Simplemente cópielo y péguelo en la entrada " URL del repositorio" . Luego haga clic en los botones "Aplicar" y "Guardar" para finalizar la integración de Git con el pipeline.


Paso 8: Pruebe Git integrado en la canalización

Ahora puede usar su canalización actualizada para extraer un proyecto de Github. Para hacerlo, debe hacer clic en el botón **“Construir ahora”**. Como resultado, verá una compilación exitosa en el historial de compilación.


La captura de pantalla de la página web de Jenkins con punteros al botón "Construir ahora" y a la sección "Historial de compilación"



Abra la primera compilación del historial de compilación.

La captura de pantalla de Jenkins Pull_Code_From_Github_Job con un resultado de trabajo exitoso


Ahora puede ver el resultado exitoso del trabajo de la primera compilación. Si abre su terminal AWS EC2. Puedes comprobar que la tubería funciona bien.


Simplemente use este comando.

 cd /var/lib/jenkins/workspace/{your pipeline name}


De esta manera, puede ver que su proyecto de Github se extrajo a su instancia de servidor virtual AWS EC2.


La captura de pantalla del proyecto Github descargada en la terminal de instancia EC2



[Módulo 4]: Apache Maven

Apache Maven es una herramienta de gestión de proyectos y automatización de compilaciones ampliamente utilizada en el desarrollo de software. Agiliza el proceso de compilación, prueba y empaquetado de código al administrar las dependencias del proyecto y proporcionar un ciclo de vida de compilación consistente. Maven emplea archivos de configuración basados en XML (archivos POM) para definir la estructura, las dependencias y las tareas del proyecto, lo que permite a los desarrolladores gestionar e implementar de manera eficiente proyectos de software complejos.


Ahora que ha integrado Git en el proceso, puede mejorarlo aún más incorporando Apache Maven, que le permite compilar, probar y empaquetar su proyecto. Para hacerlo, necesita instalar Apache Maven en su instancia del servidor virtual AWS EC2 donde se instalaron Jenkins y Git.


Paso 1: descargue Apache Maven

Para descargar Apache Maven, vaya al directorio "/opt" .

 cd /opt


Y luego usa este comando.

 sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz


Este comando descargará el último Apache Maven oficial (consulte la última versión en el sitio web oficial de Apache Maven). Para encontrar la última versión oficial de Apache Maven, utilice el enlace https://maven.apache.org/download.cgi .


Paso 2: extraiga Apache Maven del archivo

Utilice este comando para extraer Apache Maven del archivo descargado:

 sudo tar -xvzf apache-maven-*.tar.gz


Paso 3: agregue JAVA_HOME y M2_HOME

Vaya a la carpeta raíz usando este comando.

 cd ~


Edite el archivo .bash_profile usando este comando.

 vi .bash_profile


Agregue las variables JAVA_HOME y M2_HOME.


Asigne la ruta a JDK11 para JAVA_HOME y la ruta al directorio maven para la variable M2_HOME .


Para encontrar la ruta JDK, use este comando.

 sudo find / -name java 



La captura de pantalla de la página web del terminal de la instancia del servidor virtual AWS EC2 con el archivo .bash_profile


Cómo utilizar VIM

  • Para editar el archivo presione el botón del teclado “I” para insertar datos.
  • Para guardar el archivo presione el botón del teclado "esc" e ingrese ":w".
  • Para salir del archivo presione el botón del teclado “esc” e ingrese “:q” .

Guarde los cambios.


Luego, ejecute este comando para actualizar las variables del sistema.

 source .bash_profile


Para verificar $PATH , use este comando.

 echo $PATH


Para verificar Apache Maven , utilice este comando.

 mvn -v


Si has hecho todo correctamente podrás visualizar la versión de Apache Maven.

La captura de pantalla de la página web del terminal de la instancia del servidor virtual AWS EC2 con la versión de Apache Maven


Paso 4: Instale el complemento Apache Maven Jenkins

Dado que Apache Maven se puede utilizar en una instancia EC2, puede instalar el complemento Apache Maven para integrarlo con la canalización.


Para lograr esto, siga estos pasos:

  1. Vaya a "Panel de control" → "Administrar Jenkins" → "Administrar complementos" → "Disponible".
  2. En el cuadro de búsqueda, ingrese "Maven" .
  3. Elija el complemento "Integración de Maven" .


La captura de pantalla de Jenkins instalado en el servidor virtual AWS EC2 con el puntero al complemento Maven


Espere a que finalice el proceso de descarga.


Y luego haga clic en el botón “Volver a la página principal” .

La captura de pantalla de Jenkins instalado en el servidor virtual AWS EC2 con el puntero al proceso de descarga del complemento Maven


Paso 5: configurar el complemento Apache Maven Jenkins

Con la instalación exitosa del complemento Apache Maven Jenkins, ahora puede utilizar este complemento dentro del proceso que creó y actualizó en los módulos 2 y 3.


Para hacerlo, siga estos pasos:

  1. Vaya a "Panel de control" → "Administrar Jenkins" → "Configuración global de herramientas" → "JDK"
  2. Haga clic en el botón "Agregar JDK".
  3. Desmarque "Instalar automáticamente".



La captura de pantalla de Jenkins instalado en el servidor virtual AWS EC2 con el puntero a la configuración del JDK



Luego vaya a la sección "Maven" . Haga clic en el botón "Agregar Maven" . Desmarque "Instalar automáticamente".

Luego agregue el nombre y la ruta MAVEN_HOME .



La captura de pantalla de Jenkins instalado en el servidor virtual AWS EC2 con el puntero a la configuración de Apache Maven



Haga clic en los botones "Aplicar" y "Guardar" .

Aquí ha terminado de configurar el complemento Apache Maven Jenkins.


Paso 6: integrar Apache Maven en la canalización

Ahora que el complemento Apache Maven GitHub está instalado y configurado, ahora puede utilizar Apache Maven dentro de su canalización. Esto permitirá que la canalización que creó en el “[módulo 2]: Servidor Jenkins” construya el código de su proyecto para crear un artefacto jar.


Para integrar Apache Maven en la canalización, debe seguir estos pasos:

  1. Navegue hasta "Panel de control" → "CI_CD_Pipeline" → "Configurar" → "Pasos de compilación".
  2. Haga clic en el botón "Agregar paso de compilación" .
  3. Elija la opción "Invocar objetivos Maven de nivel superior" .
  4. Elija "Apache-Maven" como "Versión Maven".
  5. Agregue el comando "limpiar paquete" a la entrada "Objetivos" .
  6. Haga clic en el botón "Avanzado" .
  7. Agregue "pom.xml" a la entrada "POM" .



La captura de pantalla de la sección "Pasos de compilación" en la configuración de la canalización con punteros a los botones "Aplicar" y "Guardar".



Finalmente, debe hacer clic en los botones "Aplicar" y "Guardar" para finalizar la integración de Apache Maven con la canalización.

Paso 7: Pruebe Apache Maven integrado en la canalización

Ahora puede utilizar su canal actualizado para construir su proyecto Github. Para hacerlo, debe hacer clic en el botón **“Construir ahora”**. Como resultado, verá un resultado de trabajo exitoso en el historial de compilación.

Si abre su terminal AWS EC2. Puedes comprobar que la tubería funciona bien.


Simplemente use este comando.

 cd /var/lib/jenkins/workspace/{your pipeline name}/target


De esta manera podrá ver el artefacto JAR, que indica la compilación exitosa de su proyecto desde GitHub.



[Módulo 5]: Docker

Ahora creemos una nueva instancia EC2 con el nombre "Ansible Server" donde instalará Docker y Ansible.


Paso 1: lanzar una instancia del servidor virtual AWS EC2

Utilice las instrucciones de la sección " Iniciar una instancia de servidor virtual AWS EC2" de este tutorial para finalizar este paso. No olvide agregar una configuración de grupo de seguridad. Permite que Docker y SSH funcionen en los puertos 8080 y 22 respectivamente.


Paso 2: Conéctese a una instancia del servidor virtual AWS EC2

Haga clic en el botón "Conectar".

La captura de pantalla de la página web de AWS con el puntero al botón "Conectar"


Ahora puede ver la terminal en línea de la instancia del servidor virtual EC2.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2


 sudo chown ansible-admin:ansible-admin /opt/docker


Paso 3: instale Docker en el servidor virtual Ansible EC2.

Ahora necesita instalar Docker en su instancia Ansible EC2. Para hacer eso, necesita crear una nueva carpeta acoplable.

 sudo mkdir /opt/docker


Luego, instale Docker ejecutando el siguiente comando.

 sudo yum install docker -y


Paso 4: Agregar el usuario actual al grupo Docker en el servidor virtual Ansible EC2

Debe agregar el usuario actual "ansible-admin" al grupo Docker en el servidor virtual EC2 "AnsibleServer" para otorgar privilegios de administrador a Docker.


 sudo usermod -a -G docker ansible-admin


Deberá cerrar sesión y volver a iniciarla para que estos cambios surtan efecto.


Luego puedes ejecutar el siguiente comando.

 id ansible-admin


para ver que el nuevo usuario de Docker existe.


La captura de pantalla de la instancia Ansible EC2 con el puntero al usuario de Docker


Paso 5: inicie Docker

Ahora que Docker está instalado en la instancia Ansible EC2, puede iniciarlo ejecutando el siguiente comando.

 sudo systemctl start docker


Cuando se inicia Docker, puede ejecutar el siguiente comando

 sudo systemctl status docker


para ver que la ventana acoplable está activa y ejecutándose ahora.

La captura de pantalla de la instancia Ansible EC2 con el estado de la ventana acoplable activa


Paso 6: crear un archivo Docker

En la versión final del proceso, el proceso implicará crear una nueva imagen de Docker a partir de su proyecto de GitHub y enviarla a Docker Hub. Para lograr esto, su proyecto GitHub debe contener un Dockerfile.


Si utilizó el proyecto "Hola" que se ofreció en el módulo " [Módulo 3]: Git y Github" , entonces no necesita crear un nuevo Dockerfile ya que este repositorio de proyectos ya contiene Dockerfile.


 FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ]


Si utilizó su propio repositorio de proyectos y no contenía un Dockerfile, deberá crear un nuevo Dockerfile.


Para crear un nuevo Dockerfile, ejecute el siguiente comando, que creará el nuevo archivo.

 sudo touch Dockerfile


Luego puede completar este archivo con una secuencia de comandos que describan cómo crear un entorno de aplicación en contenedores. Estos comandos incluyen acciones como copiar archivos en la imagen, instalar software, configurar variables de entorno y configurar el contenedor.


Para llenar el Dockerfile con estos comandos, ejecute el siguiente comando.

 vim Dockerfile

El Dockerfile está listo para usar.


Paso 7: Iniciar sesión en Docker

Ahora que su Dockerfile está preparado para su uso, continúe copiando el artefacto JAR de su proyecto de la instancia EC2 **"JenkinsServer"** y péguelo en la instancia EC2 "AnsibleServer" . Es importante tener en cuenta que esta transferencia se automatizará aún más a lo largo del proceso.

Al completar este paso, estará listo para probar su Dockerfile junto con el entorno Docker que ha configurado.


Antes de comenzar las pruebas, asegúrese de autenticarse en Dockerhub. Ejecute el siguiente comando.

 docker login


Este comando le pedirá que proporcione sus credenciales de inicio de sesión de Dockerhub, incluidos su nombre de usuario y contraseña.

La captura de pantalla del inicio de sesión exitoso de Docker en la instancia EC2 "AnsibleServer"


Con esto, ha completado el proceso de inicio de sesión en Docker y ahora está listo para continuar con las pruebas.

Paso 8: Probar el entorno Docker y Dockerfile

Una vez completado el inicio de sesión exitoso en Dockerhub, ahora está listo para comenzar a probar el Dockerfile que ha preparado.


Ejecute este comando para crear una imagen acoplable.

 docker build -t hello:latest .


A continuación, ejecuta el siguiente comando para establecer una etiqueta que facilitará la carga de la imagen en Dockerhub:

 docker tag hello:latest zufarexplainedit/hello:latest


Finalmente, proceda a enviar la imagen de Docker a Dockerhub mediante la ejecución de este comando.

 docker push zufarexplainedit/hello:latest


Siguiendo estos pasos, navegue hasta su cuenta Dockerhub para verificar si puede ver una imagen nueva o no.

La captura de pantalla de la cuenta Dockerhub con la nueva imagen agregada.


Ahora deberías observar que la imagen se ha agregado efectivamente. Este resultado confirma la instalación exitosa del entorno Docker y que su Dockerfile es correcto.



[Módulo 6]: Ansible

Ahora configuremos el servidor Ansible en la instancia del servidor virtual EC2.


Paso 1: crear una instancia de servidor virtual AWS EC2

Necesita un servidor virtual para ejecutar Ansible.


Siga las instrucciones de la sección [Módulo 1]: Servidor virtual AWS EC2 de este tutorial para finalizar este paso y crear una instancia de servidor virtual EC2 para Ansible.

No olvide agregar una configuración de grupo de seguridad. Permite que Ansible y SSH funcionen en los puertos 8080 y 22 respectivamente.


Utilice el nombre "AnsibleServer" para distinguir su instancia de servidor virtual EC2.

Puede reutilizar el grupo de seguridad "CI_CD_Pipeline" y "CI_CD_Pipeline_Key_Pair" para una nueva instancia EC2 "AnsibleServer" .


Paso 2: Conéctese a una instancia del servidor virtual AWS EC2

Vaya a la página de inicio de la Consola de AWS → Panel de la Consola de administración EC2 → Instancias → AnsibleServer.


Luego haga clic en el botón "Conectar" .

La captura de pantalla de la página web de AWS con el puntero al botón "Conectar"


Entonces verá esta página web. Debes volver a hacer clic en el botón "Conectar" .


La captura de pantalla de la página web "Conectar a la instancia" de AWS con el puntero al botón "Conectar"


Ahora puede ver la terminal en línea de la instancia del servidor virtual EC2.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2


Ahora configuremos Ansible Server en la instancia del servidor virtual EC2.

Paso 3: cambie el nombre de host de la instancia del servidor virtual AWS EC2 "AnsibleServer"

Lo primero que debe hacer cuando desee configurar AnsibleServer en la instancia del servidor virtual EC2 es cambiar su nombre de host.


Vamos a hacerlo. Ejecute este comando para abrir el archivo de nombre de host:

 sudo vi /etc/hostname


Debería ver algo como esto:

La captura de pantalla de la instancia del servidor virtual AWS EC2 con el archivo de nombre de host


Reemplace este nombre de host con "ansible-server". Luego, reinícialo.

 sudo init 6 



La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el puntero al nombre de host


Paso 4: Agregar y configurar un nuevo usuario en la instancia del servidor virtual AWS EC2 "AnsibleServer"

Ahora agreguemos un nuevo usuario ansible-admin a la instancia del servidor virtual AWS EC2.

Para hacer eso use este comando:


 sudo useradd ansible-admin


Luego, configure la contraseña para el usuario ansible-admin .

 sudo passwd ansible-admin


Además, debe configurar los privilegios de usuario editando el archivo sudoers .

 sudo visudo


Agregue "ansible-admin ALL=(ALL) ALL" a este archivo sudoers .

La captura de pantalla del terminal de la instancia del servidor virtual AWS EC2 con el puntero a los privilegios de administrador


Además, debe editar el archivo /etc/ssh/sshd_config para habilitar la autenticación de contraseña.

 sudo vi /etc/ssh/sshd_config 


La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el puntero a la configuración de administrador


Luego debes recargar el servicio para confirmar estos cambios.

 sudo service sshd reload


Como resultado de ejecutar este comando, verá:


La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el puntero al resultado de recarga sshd


Ahora puede usar este comando para evitar agregar sudo a todos los comandos adicionales.

 sudo su - ansible-admin


Paso 5: Generar clave en una instancia de servidor virtual AWS EC2

Más adelante en este artículo, planea administrar servidores remotos, como instancias de servidor virtual K8s EC2. Por eso es necesario configurar claves SSH.

 ssh-keygen


Como resultado de ejecutar este comando, verá:

La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el puntero al resultado de ssh-keygen


Ahora las claves SSH están generadas y listas para usar.

Paso 6: instalar Ansible

Ahora puede instalar Ansible en su instancia de servidor virtual EC2 “AnsibleServer” .

Vamos a hacerlo.


Ejecute este comando para instalar Ansible.

 sudo amazon-linux-extras install ansible2


Para verificar Ansible, use este comando:

 ansible --version


Como resultado de ejecutar este comando, verá:

La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el puntero al resultado ansible de sudo yum install


Paso 7: Instale el complemento “Publicar a través de SSH” de Jenkins en la instancia EC2 de JenkinsServer

Como Ansible está instalado en su instancia de servidor virtual EC2 “AnsibleServer” , puede configurar Jenkins para integrarlo con Ansible. Debe instalar el complemento "Publicar a través de SSH" para integrar Jenkins con la instancia del servidor virtual EC2 donde está instalado Ansible y con otras instancias del servidor virtual EC2 donde está instalado Kubernetes .


Vaya a "Panel de control" → " Administrar Jenkins""Configurar sistema""Complementos disponibles" .

Luego ingrese "Publicar a través de SSH" en el cuadro de búsqueda.


La captura de pantalla de Jenkins instalado en el servidor virtual AWS EC2 con el puntero a la página web "Complementos disponibles"


Haga clic en el botón "Instalar sin reiniciar" . Espere a que finalice el proceso de descarga.


La captura de pantalla de Jenkins instalado en el servidor virtual AWS EC2 con el puntero a la página web "Progreso de la descarga"



Ahora el complemento "Publicar a través de SSH" está instalado en la instancia del servidor virtual Jenkins EC2.


Paso 8: Configurar el complemento "Publicar a través de SSH" de Jenkins

Con la instalación exitosa del complemento Apache Maven Jenkins, ahora puede utilizar este complemento dentro del proceso que creó y actualizó en los módulos 2 y 3.


Para hacerlo, siga estos pasos:


Vaya a "Panel de control""Administrar Jenkins""Configurar sistema""Publicar a través de SSH" .

La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el complemento "Publicar a través de SSH"


Ingrese todos los datos requeridos tal como aparecen en la captura de pantalla, incluido el nombre de host, el nombre de usuario y la clave privada (o contraseña, si corresponde).


La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el complemento "Publicar a través de SSH"


Luego haga clic en los botones "Aplicar" y "Guardar" .


Aquí ha terminado de configurar el complemento Jenkins "Publicar a través de SSH" .


A continuación, haga clic en "Probar configuración" para validar que el complemento esté funcionando correctamente.



La captura de pantalla del complemento "Publicar a través de SSH" con el botón "Probar configuración"


En el lado izquierdo puede ver que el estado de configuración del complemento de prueba es "Éxito". Significa que la configuración del complemento es correcta.


Paso 9: cree un nuevo directorio Docker en AnsibleServer

Debe crear una nueva carpeta en la instancia AnsibleServer EC2 donde se almacenará el JAR del proyecto. Este jar se utilizará para crear una imagen de Docker más adelante.


Empecemos.


Vaya a la carpeta "/opt" en la instancia AnsibleServer EC2.

 cd /opt


Cree una nueva carpeta "docker" allí.

 sudo mkdir docker


Otorgue privilegios a esta carpeta "docker" .

 sudo chown ansible-admin:ansible-admin docker


Ahora, verifique los privilegios de la carpeta "docker" ejecutando este comando.

 ll


Puede ver que se puede acceder a la carpeta "docker" con el usuario "ansible-admin" .


La captura de pantalla de la carpeta "docker" en la instancia EC2 "AnsibleServer"


Paso 10: Integre el complemento Github “Publicar a través de SSH” en el proceso


Ahora que el complemento Github "Publicar a través de SSH" está instalado y configurado, ahora puede integrarlo en la canalización que creó en el "[módulo 2]: Servidor Jenkins" para transferir un artefacto jar del proyecto desde " JenkinsServer" a “Servidor Ansible” .


Bueno, para integrar el complemento Github "Publicar a través de SSH" en el proceso, debes seguir estos pasos:


  1. Navegue hasta "Panel de control" → "CI_CD_Pipeline" → "Configurar" → "Acciones posteriores a la compilación".
  2. Haga clic en el botón "Agregar acción posterior a la compilación" .
  3. Elija la opción "Enviar artefactos de compilación a través de SSH" .
  4. Agregue "AnsibleServer" a la entrada "Nombre" en la sección "Servidor SSH" **.**
  5. Agregue “target/*.jar” a la entrada “Archivos fuente” en la sección “Conjunto de transferencia” **.**
  6. Agregue "destino/" a la entrada "Eliminar prefijo" en la sección "Conjunto de transferencia" **.**
  7. Agregue “//opt/docker/” a la entrada “Directorio remoto” en la sección “Conjunto de transferencia” **.**
  8. Por ahora, simplemente coloque una cadena vacía en la entrada 'Comando ejecutivo' en la sección 'Conjunto de transferencia'.



La captura de pantalla de la sección "Enviar artefacto de compilación a través de SSH" en la configuración de la canalización


Finalmente, debe hacer clic en los botones "Aplicar" y "Guardar" para finalizar la integración del complemento "Publicar a través de SSH" con la canalización.


Paso 11: Pruebe el complemento Github "Publicar a través de SSH" integrado en la canalización

Ahora puede usar su canalización actualizada para transferir un artefacto jar del proyecto de " JenkinsServer" a "AnsibleServer" . Para hacerlo, debe hacer clic en el botón "Construir ahora" . Como resultado, verá un resultado de trabajo exitoso en el historial de compilación.


Si abre su terminal AWS EC2 “AnsibleServer” . Puedes comprobar que la tubería funciona bien.

Simplemente use este comando.


 cd /opt/docker


De esta manera podrá ver el artefacto JAR, que indica la compilación exitosa de su proyecto desde GitHub.

La captura de pantalla del directorio /opt/docker con el artefacto jar del proyecto


Paso 12: configurar hosts Ansible

Cuando ejecuta un libro de estrategias de Ansible, especifica los hosts en los que debe ejecutarse. Puede hacer esto de dos maneras:


  1. Especifique hosts directamente en el libro de estrategias: en su libro de estrategias, puede configurar el parámetro hosts en una lista de direcciones IP o nombres de host.
  2. Utilice un archivo de inventario: Ansible le permite definir una lista de hosts en un archivo de inventario y hacer referencia a este archivo cuando ejecute su libro de estrategias. El archivo de inventario predeterminado es /etc/ansible/hosts .


Al editar /etc/ansible/hosts , puede administrar fácilmente grupos de hosts sin tener que escribir sus direcciones IP cada vez que ejecuta un libro de estrategias.


Averigüemos el host de la instancia AnsibleServer EC2 ejecutando el siguiente comando.

 sudo ifconfig 


La captura de pantalla de la configuración de la interfaz de red de la instancia AnsibleServer EC2


Después de descubrir el host de la instancia AnsibleServer EC2, puede agregarlo al archivo de hosts de Ansible ejecutando el siguiente comando.


 sudo vi /etc/ansible/hosts


También puedes agregar “[ansible]” como referencia.

La captura de pantalla del archivo de hosts de Ansible


Si está administrando un grupo de servidores y desea aplicar un libro de estrategias a todos ellos, en lugar de especificar la dirección IP de cada servidor en el libro de estrategias, simplemente puede agregar todos los servidores a un grupo en el archivo de inventario y luego especificar el grupo en el libro de jugadas.


Paso 13: Configurar la autenticación SSH sin contraseña en localhost para Ansible

Ansible está diseñado para automatizar tareas en servidores remotos. La autenticación SSH sin contraseña permite a Ansible conectarse a esos servidores sin la necesidad de ingresar una contraseña manualmente.

Ejecute este comando para crear una conexión segura desde su computadora a otra computadora (como la de la dirección IP 172.31.34.41), usando la clave SSH del usuario ansible-admin.


 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}


En mi caso, se ve así.

 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected] 


La captura de pantalla del resultado exitoso de la instalación de autenticación ssh sin contraseña


Ahora puede ver "Número de claves agregadas: 1" . Significa que la instalación de autenticación SSH sin contraseña se completó con éxito.

Paso 14: cree un nuevo libro de estrategias de Ansible para las tareas de Docker

Ahora que Ansible está todo configurado y listo para funcionar, puede crear un nuevo libro de estrategias de Ansible para su canalización. Este manual permitirá a Ansible crear y enviar una nueva imagen de Docker a Dockerhub.

Así es como puedes hacerlo:


  1. Comience creando un nuevo archivo de libro de estrategias de Ansible. Simplemente use este comando.
 touch hello-app.yml


  1. Luego, edite el archivo hello-app.yml recién creado. Ábrelo para editarlo con este comando.
 vi hello-app.yml


  1. Dentro del archivo, escriba lo siguiente.
 --- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest

El manual de Ansible para tareas de Docker está listo para usar.

Paso 13: Pruebe el manual de Ansible con tareas de Docker

Con Ansible, el libro de estrategias de Ansible, AnsibleServer y JenkinsServer configurados correctamente, es hora de probar el libro de estrategias de Ansible.


Navegue hasta la ubicación de su libro de jugadas de Ansible.

 cd /opt/docker


Luego, ejecute el siguiente comando.

 sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml


Al finalizar, verá el resultado de la ejecución exitosa de su libro de jugadas de Ansible.

La captura de pantalla del resultado de la ejecución exitosa del libro de jugadas de Ansible para tareas de Docker


Además, tómese un momento para visitar su cuenta de Dockerhub y verifique si ahora hay una nueva imagen visible.


La captura de pantalla de la cuenta Dockerhub con la nueva imagen agregada.


Deberías ver la imagen recién agregada. Este resultado confirma que su manual de estrategias de Ansible es correcto.


Paso 14: Integre las tareas de Ansible Docker en la canalización

Ahora que el complemento Github "Publicar a través de SSH" , Ansible y Docker están instalados y configurados, ahora puede integrarlos todos en la canalización que creó en el "[módulo 2]: Servidor Jenkins" para transferir un artefacto jar del proyecto. de " JenkinsServer" a "AnsibleServer" y luego cree una nueva imagen de Docker a partir de su proyecto y luego inserte esta imagen de Docker en Dockerhub.


Para lograrlo es necesario seguir estos pasos:

  1. Navegue hasta "Panel de control" → "CI_CD_Pipeline" → "Configurar" → "Acciones posteriores a la compilación" → "Enviar artefactos de compilación a través de SSH".
  2. Agregue el comando "sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml" a la entrada "Comando ejecutivo" .


La captura de pantalla de la sección "Enviar artefacto de compilación a través de SSH" en la configuración de la canalización


Finalmente, haga clic en los botones "Aplicar" y "Guardar" para finalizar las tareas de integración de Ansible Docker con la canalización.

Paso 15: Pruebe el “libro de estrategias de Ansible con tareas de Dockerintegrado en la canalización

Ahora puede probar su canalización actualizada para transferir sin problemas un artefacto jar del proyecto desde " JenkinsServer" a "AnsibleServer", luego crear una nueva imagen de Docker a partir de su proyecto y luego enviar esta imagen de Docker a Dockerhub. Para hacerlo, debe hacer clic en el botón "Construir ahora" . Como resultado, verá un resultado de trabajo exitoso en el historial de compilación.


Además, tómese un momento para visitar su cuenta de Dockerhub y verifique si ahora hay una nueva imagen visible.


La captura de pantalla de la cuenta Dockerhub con la nueva imagen agregada.


Deberías ver la imagen recién agregada. Este resultado confirma que su manual de estrategias de Ansible con tareas de Docker se integró exitosamente en la canalización.


[Módulo 7]: Kubernetes

Ahora configuremos K8 en la instancia EC2. Creará una nueva instancia EC2 e instalará su herramienta de línea de comandos kubectl para interactuar más con un clúster de Kubernetes .


Paso 1: lanzar una instancia del servidor virtual AWS EC2

Utilice las instrucciones de la sección " Iniciar una instancia de servidor virtual AWS EC2" de este tutorial para finalizar este paso.


No olvide agregar una configuración de grupo de seguridad. Permite que todas las herramientas y SSH funcionen en los puertos 8080 y 22 respectivamente.


Utilice el nombre "K8sServer" para distinguir su instancia de servidor virtual EC2.

Puede reutilizar el grupo de seguridad “CI_CD_Pipeline” y “CI_CD_Pipeline_Key_Pair” para una nueva instancia EC2 “K8sServer” .


Paso 2: Conéctese a una instancia del servidor virtual AWS EC2

Haga clic en el botón "Conectar".

La captura de pantalla de la página web de AWS con el puntero al botón "Conectar"


Ahora puede ver la terminal en línea de la instancia del servidor virtual EC2.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2


Paso 3: cambiar el nombre de host de la instancia del servidor virtual AWS EC2 “KubernetesServer”

Lo primero que debe hacer cuando desee configurar KuberenetesServer en una instancia de servidor virtual EC2 es cambiar su nombre de host.


Vamos a hacerlo. Ejecute este comando para abrir el archivo de nombre de host:

 sudo vi /etc/hostname


Debería ver algo como esto.

La captura de pantalla de la instancia del servidor virtual AWS EC2 con el archivo de nombre de host


Reemplace este nombre de host con "kubernetes-server" y luego reinícielo.

 sudo init 6


Su nombre de host fue cambiado.

La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el puntero al nombre de host


Paso 4: verifique la versión de AWS CLI

Utilice este comando para comprobar la versión de AWS .

 aws --version


De esta manera podrá ver su versión actual de aws-cli.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2 con el resultado del comando de versión de AWS


Si puede ver la versión aws-cli/1.18 , debe descargar la última versión.


Paso 5: actualice la CLI de AWS

Ahora que descubrió que tiene una versión antigua de aws-cli en su instancia EC2, debe actualizarla. Para eso, vaya a AWS → Documentación → Interfaz de línea de comandos de AWS → Guía del usuario para la versión 2.


La captura de pantalla de la página web de la instancia del servidor virtual AWS EC2 con la Guía del usuario para la versión 2


Copie y pegue el comando curl .


Primero, ejecute este comando para descargar la versión 2 de awscli.

 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

Espere a que comience el proceso de descarga.


Debería ver algo como esto.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2 con la descarga del resultado de la versión 2 de AWS


En segundo lugar, debe ejecutar este comando para descomprimir el archivo awscli versión 2.

 unzip awscliv2.zip


En tercer lugar, debe ejecutar este comando para instalar awscli versión 2.

 sudo ./aws/install


Luego, vuelva a cargar el terminal en línea de la instancia del servidor virtual Kubernetes EC2.


A continuación, utilice este comando para comprobar la versión de AWS.

 aws --version


Puede ver que aws cli tiene aws-cli/2.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2 con el resultado del comando de la versión de AWS


Paso 6: instalar kubectl

Kubectl es una herramienta de línea de comandos fundamental para interactuar con cualquier clúster de Kubernetes, independientemente de la infraestructura subyacente. Le permite administrar recursos, implementar aplicaciones, configurar redes, acceder a registros y realizar otras tareas dentro de un clúster de Kubernetes.


Ahora necesita instalar la herramienta de línea de comandos kubectl para interactuar más con un clúster de Kubernetes. Para eso, debe ir a AWSDocumentaciónAmazon EKSGuía del usuarioInstalación o actualización de kubectlLinux .


O simplemente haga clic en el enlace https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html .


La captura de pantalla de la Guía del usuario de AWS EKS



Primero, ejecute este comando para descargar kubectl.

 curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl


Espere el proceso de descarga.


Verás algo como esto.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2 con el resultado de la descarga de kubectl


Dar permiso a kubectl.

 chmod +x kubectl


Mueva kubectl a la carpeta /usr/local/bin.

 sudo mv kubectl /usr/local/bin


Verifique la versión de kubectl.

 kubectl version --output=yaml


Paso 7: instale eksctl

Eksctl es otra herramienta de línea de comandos diseñada específicamente para el servicio Amazon EKS. Eksctl se puede utilizar para crear clústeres de AWS EKS, administrar grupos de nodos y realizar tareas específicas de EKS, como la integración con roles de IAM y otros servicios de AWS, abstrayendo gran parte de la configuración y administración de la infraestructura de AWS.


Ejecute el comando para descargar kubectl.

 curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp


Mueva eksctl a la carpeta /usr/local/bin.

 sudo mv /tmp/eksctl /usr/local/bin


Verifique la versión de eksctl.

 eksctl version


Deberías ver la versión.

La captura de pantalla del terminal en línea de la instancia del servidor virtual AWS EC2 con la versión eksctl


Paso 8: Crear función de IAM para eksctl

Debe crear una función de IAM y adjuntarla a su instancia EC2 "KubernetesServer" .

Para hacer eso, necesita encontrar EC2 en el cuadro de búsqueda.


Elija EC2 Virtual Server haciendo clic en el enlace https://us-east-1.console.aws.amazon.com/ec2 /.

La captura de pantalla de la página web de AWS con el puntero a "IAM"


Vaya a Panel de IAMRoles .

La captura de pantalla de la página web de AWS con el puntero a "Roles de IAM"


Haga clic en el botón "Crear rol" en la página web de roles de IAM .


Luego elija "servicio AWS", "EC2". Y haga clic en el botón "Siguiente" .

La captura de pantalla de la página web de AWS con el puntero a "Configuración de roles de IAM"


Luego, busque "AmazonEC2FullAccess" , "AmazonEC2FullAccess" , "IAMFullAccess" , "AWSCloudFormationFullAccess" en el cuadro de búsqueda y luego haga clic en el botón "Agregar permisos" .


Y luego haga clic en el botón "Siguiente" .

La captura de pantalla de la página web de AWS con el puntero al permiso AdministratorAccess

Luego escriba "Eksctl_Role" en la entrada "Nombre de rol" .

Y haga clic en el botón "Crear rol" .

La captura de pantalla de la página web de AWS con el puntero a la configuración del rol de permiso


El rol finalmente se crea.


Paso 9: conecte el rol de IAM con eksctl

Vaya a la página web de la instancia AWS EC2. Elija "Servidor Kuberbetes". Luego haga clic en "Acciones""Seguridad""Modificar función de IAM".


La captura de pantalla de la página web de AWS con el puntero al botón KubernetesServer Security



Elija "Eksctl_Role" y luego haga clic en el botón "Actualizar función de IAM" .


La captura de pantalla de la página web de AWS con el puntero al rol Elsctl_Role IAM


Ahora su rol de IAM está conectado con su “EKS_Server” y su herramienta eksctl.

Paso 10: crear un clúster eksctl


Un clúster de Amazon EKS (Elastic Kubernetes Service) es un entorno de Kubernetes administrado en AWS que automatiza tareas complejas de infraestructura como configuración, escalado y mantenimiento. Es esencial ya que proporciona una plataforma eficiente, segura y optimizada para AWS para implementar, administrar y escalar aplicaciones en contenedores, agilizar las operaciones y liberar a los desarrolladores para que se concentren en la codificación en lugar de administrar la infraestructura subyacente.


Ahora es el momento de configurar su clúster EKS.


Para lograr esto, siga estos pasos:


  1. Modifique el siguiente comando con su información específica.
 eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2>


Por ejemplo, en mi caso, se ve así.

 eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro


  1. Ejecute el comando modificado y espere pacientemente hasta que se complete el proceso de creación del clúster. Notará que el estado del clúster EKS se indica como "creando" en la página web de AWS CloudFormation.


La captura de pantalla de la página web de AWS con el puntero a AWS CloudFormation donde puede ver el estado de "creación" del clúster EKS


El procedimiento de creación del clúster suele tardar unos 20 minutos. Una vez completado, el terminal mostrará el resultado del proceso.


La captura de pantalla de la página web de AWS con el puntero al terminal AWS EC2 donde puede ver el resultado de la creación del clúster EKS


Además, puede verificar el estado de creación exitosa del clúster EKS en la página web de AWS CloudFormation.


La captura de pantalla de la página web de AWS con el puntero a AWS CloudFormation donde puede ver el resultado de la creación del clúster EKS


Paso 11: Crear el archivo yaml de implementación de Kubernetes

Un archivo YAML de implementación de Kubernetes es un script de configuración escrito en formato YAML que define cómo administrar y mantener una aplicación o servicio específico dentro de un clúster de Kubernetes. Encapsula instrucciones para orquestar la implementación, escalado, actualización y monitoreo de contenedores que ejecutan la aplicación. Este archivo incluye detalles como la imagen del contenedor, la cantidad deseada de réplicas, límites de recursos, variables de entorno, configuración de red y más. Cuando se aplica a un clúster de Kubernetes, el archivo YAML de implementación garantiza el estado deseado de la aplicación, gestionando automáticamente la creación, el escalado y la recuperación de contenedores para mantener el nivel deseado de disponibilidad y confiabilidad.


Ahora, como el clúster de Kubernetes, eksctl y kubectl están instalados y configurados, puede crear un archivo yaml de implementación de Kubernetes.


Puede hacerlo ejecutando el siguiente comando.

 touch hello-app-deployment.yaml


Luego, edite este archivo ejecutando el siguiente comando.

 vi hello-app-deployment.yaml


Agregue este contenido a hello-app-deployment.yaml.

 apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1


Ahora hello-app-deployment.yaml está creado y listo para usar.


Paso 12: cree el archivo yaml del servicio Kubernetes

Un archivo YAML del servicio Kubernetes es un script de configuración escrito en formato YAML que define una abstracción de red para un conjunto de pods, lo que permite acceder a ellos de manera consistente dentro de un clúster de Kubernetes. Este archivo describe cómo otros servicios o clientes externos deben descubrir, acceder y equilibrar la carga del servicio. Incluye especificaciones como el tipo de servicio (ClusterIP, NodePort, LoadBalancer), números de puerto, selectores para identificar pods y más. Cuando se aplica a un clúster de Kubernetes, el archivo YAML del servicio crea una IP virtual y un puerto que enruta el tráfico a los pods apropiados, abstrayendo los cambios subyacentes del pod y proporcionando un punto final estable para la comunicación, lo que permite una conectividad perfecta y un escalado dinámico.


Como el clúster de Kubernetes, eksctl y kubectl están instalados y configurados, puede crear un archivo yaml del servicio Kubernetes.


Para hacer eso, necesita crear un archivo yaml del servicio Kubernetes ejecutando el siguiente comando.

 touch hello-app-service.yaml


Luego, edite este archivo ejecutando el siguiente comando.

 vi hello-app-service.yaml


Agregue este contenido a hello-app-deployment.yaml.

 apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer

Ahora hello-app-service.yaml está creado y listo para usar.


Paso 13: Pruebe el clúster de Kubernetes usando kubectl

Con su clúster de Kubernetes EKS instalado y configurado correctamente, y sus archivos de implementación y servicio de Kubernetes listos, es hora de poner las cosas a prueba utilizando los comandos de kubectl.


  1. Aplicar implementación.

    Utilice el siguiente comando para aplicar la configuración de implementación.

 kubectl apply -f hello-app-deployment.yaml

Esto creará una implementación con la cantidad especificada de réplicas y una estrategia de actualización continua, lo que garantizará la disponibilidad y capacidad de administración de su aplicación.


2. Aplicar Servicio.

A continuación, aplique la configuración del servicio.

 kubectl apply -f hello-app-service.yaml

Esto configurará un servicio tipo LoadBalancer, exponiendo su aplicación a Internet.

Tenga en cuenta que es posible que el LoadBalancer tarde un poco en aprovisionarse y adquirir una dirección IP externa.


  1. Verifique el estado del LoadBalancer.

    Supervise el estado de su servicio utilizando.

 kubectl get service zufarexplainedit-hello-app-service

Cuando se asigna una IP externa, ya casi está listo para acceder a su aplicación.


  1. Accede a tu aplicación.

    Usando un navegador web, ingrese la dirección IP externa asignada seguida de :8080. Después de un breve momento, la página se cargará y mostrará el mensaje "HelloWorld". Tenga en cuenta que la carga inicial puede tardar unos segundos.


    La captura de pantalla de la página web de la aplicación Hello.


Limpiar con comandos kubectl

Cuando necesite ordenar recursos dentro de su entorno de Kubernetes, puede usar los siguientes comandos de kubectl para eliminar implementaciones, pods y servicios de manera efectiva.


1. Eliminar todas las implementaciones .

Para eliminar todas las implementaciones, puede utilizar el siguiente comando.

 kubectl delete deployments --all

Esta acción garantiza que no queden instancias de implementación activas en su clúster.


2. Eliminar todos los pods .

Si necesita eliminar todos los pods, ya sea que estén administrados por una implementación o no, puede usar el siguiente comando.

 kubectl delete pods --all

Borrar pods puede ayudar a restablecer el estado de su clúster o prepararse para nuevas implementaciones.


3. Eliminar todos los servicios .

Para limpiar servicios que exponen sus aplicaciones a la red, puede usar el siguiente comando.

 kubectl delete services --all

La eliminación de servicios puede implicar tiempo de inactividad, así que considere las implicaciones antes de continuar.

Eliminación de un clúster de Amazon EKS

Para eliminar todos los recursos asociados con el clúster de Amazon EKS especificado creado con eksctl , incluidos los nodos trabajadores, los componentes de red y otros recursos, puede utilizar el siguiente comando.

 eksctl delete cluster --name {your cluster name} --region {your region name}

Para mí lo es.

 eksctl delete cluster --name zufarexplainedit --region eu-north-1

Asegúrese de estar seguro de detener el clúster, ya que esta acción es irreversible y provocará la pérdida de datos.



Paso 14: Agregar y configurar un nuevo usuario en la instancia del servidor virtual AWS EC2 “KubernetesServer”

Ahora agreguemos un nuevo usuario ansible-admin a la instancia del servidor virtual AWS EC2 “KubernetesServer” .


Para hacer eso use este comando.

 sudo useradd ansible-admin


Luego, configure la contraseña para el usuario ansible-admin .

 sudo passwd ansible-admin


Además, debe configurar los privilegios de usuario editando el archivo sudoers .

 sudo visudo


Agregue "ansible-admin ALL=(ALL) ALL" a este archivo sudoers .

La captura de pantalla del terminal de la instancia del servidor virtual AWS EC2 con el puntero a los privilegios de administrador


Además, debe editar el archivo /etc/ssh/sshd_config para habilitar la autenticación de contraseña.

 sudo vi /etc/ssh/sshd_config 


La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el puntero a la configuración de administrador


Luego deberá recargar el servicio para realizar estos cambios.

 sudo service sshd reload


Como resultado de ejecutar este comando, verá:

La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el puntero al resultado de recarga sshd


Ahora puede usar este comando para evitar agregar sudo a todos los comandos adicionales.

 sudo su - ansible-admin


Paso 15: Generar clave en una instancia de servidor virtual AWS EC2

Más adelante en este artículo, planea administrar servidores remotos, como la instancia del servidor virtual EC2 de K8 . Por eso es necesario configurar claves SSH.


 ssh-keygen


Como resultado de ejecutar este comando, verá:

La captura de pantalla del terminal de instancia del servidor virtual AWS EC2 con el puntero al resultado de ssh-keygen


Ahora las claves SSH están generadas y listas para usar.

Paso 16: Configurar la autenticación SSH sin contraseña en localhost para Ansible

Ansible está diseñado para automatizar tareas en servidores remotos. La autenticación SSH sin contraseña permite a Ansible conectarse a esos servidores sin la necesidad de ingresar una contraseña manualmente.

Ejecute este comando para crear una conexión segura desde su computadora a otra computadora (como la de la dirección IP 172.31.34.41), usando la clave SSH del usuario ansible-admin.


 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}


En mi caso, se ve así.

 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected] 


La captura de pantalla del resultado exitoso de la instalación de autenticación ssh sin contraseña


Ahora puede ver "Número de claves agregadas: 1" . Significa que la instalación de autenticación SSH sin contraseña se completó con éxito.


Paso 17: Configurar hosts Ansible en la instancia AnsibleServer EC2

Cuando ejecuta un libro de estrategias de Ansible, especifica los hosts en los que debe ejecutarse. En este paso, debe especificar el host de la instancia EC2 de KubernetesServer. Para hacerlo, debe repetir los mismos pasos que pasó en " [Módulo 6]: Ansible".


Averigüemos el host de la instancia EC2 de KubernetesServer ejecutando el siguiente comando.

 sudo ifconfig 


La captura de pantalla del archivo "ifconfig"


Después de encontrar el host de la instancia EC2 de KubernetesServer, puede agregarlo al archivo de hosts de Ansible ejecutando el siguiente comando.

 sudo vi /etc/ansible/hosts 


La captura de pantalla de los archivos "hosts" con hosts ansible y kubernetes


También puedes agregar “[kubernetes]” como referencia.

Paso 18: cree un nuevo manual de Ansible para las tareas de Kubernetes

Ahora que Kubernetes está configurado y listo para funcionar, puede crear un nuevo libro de estrategias de Ansible con tareas de Kubernetes para su canalización. Este manual permitirá a Ansible ejecutar su aplicación en el clúster de Kubernetes con comandos kubectl.


Así es como puedes hacerlo:


  1. Comience creando un nuevo archivo de libro de estrategias de Ansible. Simplemente use este comando.
 touch kubernetes-hello-app.yml


  1. Luego, edite el archivo hello-app.yml recién creado. Ábrelo para editarlo con este comando.
 vi kubernetes-hello-app.yml


  1. Dentro del archivo, escriba lo siguiente:
 --- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app

El manual de Ansible para tareas de Kubernetes está listo para usar.


Paso 19: Integre un nuevo manual de Ansible para tareas de Kubernetes con Jenkins

Ahora que Kubernetes, Ansible y el manual de estrategias de Ansible para las tareas de Kubernetes están configurados y listos para funcionar, puede integrarlo con Jenkins.


  1. Vaya a JenkinsServer → Panel de Jenkins → Nuevo elemento.

  2. Cree un nuevo proyecto Jenkins Freestyle con el nombre "CD-Job".


    La captura de pantalla de un nuevo proyecto de estilo libre de Jenkins "CD-Job"


  3. Haga clic en el botón "Aceptar".

  4. Vaya a la sección "Acciones posteriores a la compilación".

  5. Haga clic en el botón "Agregar acción posterior a la compilación".

  6. Elija la opción "Enviar artefactos de compilación a través de SSH".

  7. Elija "AnsibleServer" como servidor SSH.

  8. Agregue este comando a la entrada "comando ejecutivo".


 sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml


  1. Haga clic en los botones "Aplicar" y "Guardar".

  2. Vaya al panel de Jenkins → “CI_CD_Pipeline” → Configurar → sección “Acciones posteriores a la compilación”.

  3. Haga clic en el botón "Agregar acción posterior a la compilación".

  4. Elija la opción "Crear otros proyectos".

  5. Vaya a la sección "Crear otros proyectos".

  6. Elija la opción "Activar solo si la compilación es estable".

  7. Agregue "CD-Job" a la entrada "Proyecto para construir".



    La captura de pantalla de la sección "Crear otros proyectos"


  8. Haga clic en los botones "Aplicar" y "Guardar".


Ahora puedes considerar que la tubería está completamente terminada y lista para usar.


Paso 20: Probar la versión final del canal

Ahora es el momento de poner a prueba la versión final del pipeline.


Navegue a Jenkins → Panel de Jenkins → "CI_CD_Pipeline".


Haga clic en el botón "Construir ahora".


Para ver los resultados, revise los registros de la consola de compilación.


La captura de pantalla de los registros de la consola de compilación.


Notará que el "CD-Job" se activó en los registros de la consola de compilación y el estado final está marcado como ÉXITO.

4

Además, puede dirigirse a Dockerhub para confirmar la adición de la nueva imagen de Docker.

Y finalmente, puede acceder a su aplicación mediante un navegador web. Ingrese la dirección IP externa asignada seguida de ":8080". Después de un breve momento, la página se cargará y mostrará el mensaje "HelloWorld".


Conclusión

¡Enhorabuena por configurar este moderno canal de CI/CD!

¡Has hecho un trabajo increíble y eres un verdadero héroe!


¡Gracias por todo tu esfuerzo!




Sobre el Autor

Zufar Sunagatov es un experimentado ingeniero de software senior apasionado por el diseño de sistemas de software modernos.


Zufar Sunagatov