Crear nodo en jenkins para conectar instancia ec2 de aws


Aprende a crear nodo en jenkins para conectar instancia ec2 de aws y realizar la ejecución de los pipeelies

oscar Escrito por oscar 09 January 2023 815 0

Precondiciones para la practica

Para realizar esta practica vamos a requerir de los siguientes programas, configuraciones e instalaciones:

  1. Se requiere tener una cuenta AWS, en el artículo instroducción a AWS encontrara información de como crear y configurar una cuenta AWS.
  2. Se requiere crear una instancia EC2 de AWS, el el post explicamos el paso a paso de crear una instancia ec2 de amazon aws.
  3. Realizar la instalación de Jenkins en cualquier plataforma.

Entronos de trabajo

Para esta practica he creado un contenedor en Docker, el cual tiene la configuración básica para iniciar Jenkins, esta configuración la puede revisar en primeros pasos con jenkins y docker.

Crear una instancia EC2

Las caracteristicas de esta instancia para la practica son las básicas, la instancia de prueba que he creado tiene lo siguiente:

Resumen de instancias EC2

El resultado es el siguiente, es la instancia llamada qa. 

Lista de instancias EC2

Instalar Jenkins

En el artículo primeros pasos con jenkins y docker encontrará a detalle como hacer la instalación de docker con jenkins.

Nota: Para esta practica se usará un entorno docker para instalar jenkins, pero ustedes puede usar cualquier entorno, lo importante es tener un entorno de trabajo de jenkins.

Se ha creado el post Instalar y configurar jenkins en ubuntu | CodigoElectronica donde se detalla cómo configurar jenkins

Contenedor docker jenkins
Jenkins

Pasos para crear nodo en jenkins para conectar instancia ec2 de aws

Paso 1: configurar credenciales

En Jenkins vamos a realizar los siguientes pasos:

1. Ingresamos a Administrar Jenkins > Credenciales > Sistema y para esta practica agregaremos las credenciales al dominio Global.

Credenciales globales

 

2. Damos en añadir una nueva credencial, donde cargará el formulario para añadir una nueva credencial.

Agregar nueva credencial
Campo Valor Documentación
Kind SSH Username with private key  
Scope Global (Jenkins, nodes, items, all child items, etc)

Determina dónde se puede utilizar esta credencial.

Sistema: Esta credencial solo está disponible para el objeto al que está asociada la credencial. Por lo general, usaría credenciales del ámbito del sistema para cosas como la autenticación de correo electrónico, la conexión del agente, etc., es decir, donde la instancia de Jenkins usa la credencial. A diferencia del alcance global, esto restringe significativamente dónde se puede usar la credencial, lo que proporciona un mayor grado de confidencialidad a la credencial.

Global: Esta credencial está disponible para el objeto en el que está asociada la credencial y todos los objetos que son hijos de ese objeto.

Por lo general, usaría credenciales de alcance global para las cosas que necesitan los trabajos. En general, una credencial se define en un lugar (p. ej., la página de configuración de credenciales en "Administrar Jenkins") y luego se usa en otro lugar (p. ej., cuando se conecta a un nuevo agente de compilación SSH). El alcance le permite decir "esta credencial solo la usan estos lugares" observando la relación entre las dos ubicaciones.

ID  

Un ID exclusivo interno mediante el cual estas credenciales se identifican a partir de trabajos y otras configuraciones. Normalmente se deja en blanco, en cuyo caso se generará una ID, lo cual está bien para los trabajos creados mediante formularios visuales. Útil para especificar explícitamente cuando se usan credenciales de configuración con secuencias de comandos.

Nota: si lo dejamos vacio, colocara uno aleatorio con la siguiente estructura: c2061eeb-9594-486d-b13b-ece21c11568e

Descripción instancia ec2 Una descripción opcional para ayudar a diferenciar credenciales similares.
Username ubuntu Nombre de usuario con que incia sesión en la instancia EC2
Private key

Colocamos el sigueinte texto de las llaves .pem

-----BEGIN RSA PRIVATE KEY-----
AojxToAOHRH5kXkqqaLy

......

4omSs6t+chm4EZyFSGan3vuVXr
-----END RSA PRIVATE KEY-----

En esta sección se agrega la key .pem que se genera en Amazon EC2 key pairs and Linux instances - Amazon Elastic Compute Cloud

 

3. Damos en guardar, si todo ha salido buen, redirecionará al listado de credenciales creadas donde podemos ver la nueva credencial.

Leyenda

Paso 2: crear nodo en Jenkins

1. Ingresamos a Administrar Jenkins > Administrar nodos > Nuevo nodo

Crear nuevo nodo

2. En el primer formulario configuraremos lo siguiente:

Opciones de nuevo nodo

 

3. Al dar crear en el primer formulario, cargara el formulario de configuración del nodo, para ello nos guiaremos de la siguiente tabla de que se ha creado con todas las opciones:

Campo Valor Documentación
Nombre produccion1

Nombre que identifica de forma única a un agente dentro de esta instalación de Jenkins.

No es necesario que sea el mismo que el nombre de host del agente (cuando corresponda), pero a menudo es conveniente hacerlos iguales.

El nombre no puede contener ningún carácter de esta lista: ?*/\%!@#$^&|<>[]:;

Descripción Nodo de producción de AWS Descripción legible por humanos opcional para este agente.
Esto podría incluir información útil para los usuarios, como cuántos núcleos de CPU tiene el agente, cuánta RAM tiene instalada, su ubicación física, etc.
Número de ejecuciones: 1

El número máximo de compilaciones simultáneas que Jenkins puede realizar en este nodo.

Un buen valor para comenzar sería la cantidad de núcleos de CPU en la máquina. Establecer un valor más alto haría que cada compilación tomara más tiempo, pero podría aumentar el rendimiento general. Por ejemplo, una compilación podría estar vinculada a la CPU, mientras que una segunda compilación que se ejecuta al mismo tiempo podría estar limitada a E/S, por lo que la segunda compilación podría aprovechar la capacidad de E/S libre en ese momento.

Los agentes (nodos que no son el nodo incorporado) deben tener al menos un ejecutor. Para evitar temporalmente que se ejecuten compilaciones en un agente, use el botón Marcar este nodo temporalmente fuera de línea en la página del agente.

Para el nodo incorporado, establezca la cantidad de ejecutores en cero para evitar que ejecute compilaciones localmente en el controlador. Nota: El nodo integrado siempre podrá ejecutar tareas de peso ligero, incluida la tarea de nivel superior de Pipeline.

Directorio raíz remoto /home/ubuntu Un agente necesita tener un directorio dedicado a Jenkins. Especifique la ruta a este directorio en el agente. Lo mejor es usar una ruta absoluta, como /var/jenkins o c:\jenkins . Esta debe ser una ruta local a la máquina del agente. No es necesario que esta ruta sea visible desde el controlador.
Etiqueta produccion1

Las etiquetas (o etiquetas) se utilizan para agrupar varios agentes en un grupo lógico.

Por ejemplo, si tiene varios agentes de Windows y tiene un trabajo que debe ejecutarse en Windows, puede configurar todos sus agentes de Windows para que tengan la etiqueta ventanas y luego vincular ese trabajo a esta etiqueta. Esto aseguraría que su trabajo se ejecute en uno de sus agentes de Windows, pero no en ningún agente sin esta etiqueta.

Usar Utilice este nodo tanto como sea posible

Controla cómo se construyen los programas de Jenkins en este nodo.

  • Utilice este nodo tanto como sea posible.
  • Cree trabajos solo con expresiones de etiqueta que coincidan con este nodo.
Metodo de ejecución

Arrancar agentes remotos en máquinas Unix vía SSH.

  • Nombre de la maquina: 
  • Credenciales: Ubuntu (instancia ec2)
  • Estrategia de verificación de clave de host: Estrategia de verificación de clave de confianza manual (Manually trusted key Verification Strategy)

Nota: De todas las opciones posibles, seleccionaremos la siguiente.

Controla como Jenkins inicia este agente.

  • Arrancar agentes remotos en máquinas Unix vía SSH.
    • Nombre de la maquina: nombre de host o IP del agente para conectarse.
    • Credenciales: seleccione las credenciales que se utilizarán para iniciar sesión en el host remoto.
    • Estrategia de verificación de clave de host: controla cómo Jenkins verifica la clave SSH presentada por el host remoto mientras se conecta.
Disponibilidad Mantenga a este agente en línea tanto como sea posible (Keep this agent online as much as possible) Controla cuando Jenkins inicia y detiene a este agente.

3. Damos en guardar y procedemos a hacer las pruebas de conexión del nodo.

Lanzar agente

Paso 3: crear pipeline de prueba

Para guiarse en la creación del pipeline, esta la documentación oficial Pipeline (jenkins.io).

El siguiente pipeline de ejemplo realizará ejecuciones en la shell de linux.

pipeline {
    agent {
        node {
            label 'produccion1'
        }
    }
    stages {
        stage('Conenctar AWS') {
            steps {
                sh 'uname -s';
                sh 'uname -n';
                sh 'uname -r';
                sh 'uname -v';
                sh 'uname -m';
                sh 'hostname';
                sh 'whoami';
            }
        }
        stage('Feedback') {
            steps {
                echo 'send reports'
            }
        }
    }
}
  • Agent usa el agente produccion1 que se ha creado anteriormente.
  • Stages , se crea dos de prueba.
  • Stage "conectar AWS" tenemos la ejecución shell para esta prueba.
Menú del pipeline

 

Consola de salida del pipeline

Consola de salida del pipeline

Referencias

Jenkins on EC2 : Setting up Master and Slave nodes - 2021 (bogotobogo.com)


Comentario

Debe aceptar antes de enviar