Precondiciones para la practica
Para realizar esta practica vamos a requerir de los siguientes programas, configuraciones e instalaciones:
- 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.
- Se requiere crear una instancia EC2 de AWS, el el post explicamos el paso a paso de crear una instancia ec2 de amazon aws.
- 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:
El resultado es el siguiente, es la instancia llamada qa.
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
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.
2. Damos en añadir una nueva credencial, donde cargará el formulario para añadir una 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----- ...... 4omSs6t+chm4EZyFSGan3vuVXr |
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.
Paso 2: crear nodo en Jenkins
1. Ingresamos a Administrar Jenkins > Administrar nodos > Nuevo nodo
2. En el primer formulario configuraremos lo siguiente:
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.
|
Metodo de ejecución |
Arrancar agentes remotos en máquinas Unix vía SSH.
|
Nota: De todas las opciones posibles, seleccionaremos la siguiente. Controla como Jenkins inicia este agente.
|
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.
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.
Consola de salida del pipeline
Jenkins on EC2 : Setting up Master and Slave nodes - 2021 (bogotobogo.com)