Una guía paso a paso para crear la canalización de Jenkins

Why Jenkins Pipeline?

Continuous Delivery (CD) es una parte esencial del ciclo de vida de DevOps.

Se asegura de que los desarrolladores de software / aplicaciones que están creando estén siempre listos para la producción. Para que esto suceda, cada vez que el código se actualiza, debe compilarse, probarse e implementarse continuamente. Aquí es donde Jenkins Pipeline entra en escena.

In DevOps, La integración continua y la entrega continua (CI / CD) se logra a través de Jenkins Pipeline. El uso de Jenkins Pipeline para CD ayuda a entregar el software con lanzamientos más rápidos y frecuentes. Esto ayuda a incorporar los comentarios en cada próxima versión.

What is Jenkins Pipeline?

Jenkins Pipeline es una combinación de trabajos para entregar software continuamente usando Jenkins.

Supongo que sabes lo que es Jenkins. Si no, mira esto Curso de Udemy para dominar Jenkins.

Una canalización de Jenkins consta de varios estados o etapas, y se ejecutan en una secuencia, una tras otra. JenkinsFile es un archivo de texto simple que se usa para crear una canalización como código en Jenkins. Contiene código en Groovy Domain Specific Language (DSL), que es fácil de escribir y legible por humanos.

Puede ejecutar JenkinsFile por separado o también puede ejecutar el código de canalización desde la interfaz de usuario web de Jenkins. Hay dos formas de crear una canalización con Jenkins.

  • Declarativo: una nueva forma de crear Jenkins Pipeline. Aquí escribe un código maravilloso que contiene bloques de "canalización", que se registra en un SCM (Gestión de código fuente)
  • Secuencia de comandos: forma de escribir código maravilloso donde el código se define dentro de bloques de "nodo".

Antes de entrar en la demostración, si no ha instalado Jenkins, instálelo primero. Asegúrese de tener Jenkins en funcionamiento en su sistema.

Create a Jenkins Pipeline

Así es como se ve un flujo de tubería de Jenkins, que consta de múltiples etapas entre los desarrolladores que crean un software (codificación) y el software entregado en producción.

Oleoducto Jenkins

Creemos una canalización declarativa.

En el panel de Jenkins, haga clic en Nuevo elemento. Luego ingrese un nombre de elemento, por ejemplo, 'Primera canalización' y seleccione el proyecto 'Canalización'. Luego haga clic en Aceptar.

Nuevo artículo: tubería Jenkins

Haga clic en la pestaña Pipeline como se muestra en la imagen a continuación, y coloque su código JenkinsFile (Groovy Code) aquí.

Jenkins Código de archivo

pipeline {
         agent any
         stages {
                 stage('Build') {
                 steps {
                     echo 'Hi, GeekFlare. Starting to build the App.'
                 }
                 }
                 stage('Test') {
                 steps {
                    input('Do you want to proceed?')
                 }
                 }
                 stage('Deploy') {
                 parallel { 
                            stage('Deploy start ') {
                           steps {
                                echo "Start the deploy .."
                           } 
                           }
                            stage('Deploying now') {
                            agent {
                                    docker {
                                            reuseNode true
                                            image ‘nginx’
                                           }
                                    }
                            
                              steps {
                                echo "Docker Created"
                              }
                           }
                           }
                           }
                 stage('Prod') {
                     steps {
                                echo "App is Prod Ready"
                              }
                 
              }
}
}

Déjame explicarte los bloques anteriores.

  • La industrial El bloque consta de todas las instrucciones para crear, probar y entregar software. Es el componente clave de Jenkins Pipeline.
  • An agente se asigna para ejecutar la canalización en un nodo y asignar un espacio de trabajo para la canalización.
  • A escenario es un bloque que tiene pasos para construir, probar e implementar la aplicación. Las etapas se utilizan para visualizar los procesos de Jenkins Pipeline.
  • A paso es una única tarea que se debe realizar, por ejemplo, crear un directorio, ejecutar una imagen de la ventana acoplable, eliminar un archivo, etc.

El código Groovy anterior, lo estoy usando para JenkinsFile. Cualquier agente disponible será asignado a la canalización. Luego estoy definiendo la etapa de construcción y realizando un simple paso de eco. Luego definí la etapa de Prueba donde el paso pregunta si desea continuar o no. Después de eso, he creado una etapa de implementación, que tiene dos etapas más ejecutándose en paralelo. La etapa de inicio de implementación tiene un paso con comando echo, y la implementación ahora tiene un paso que extrae una imagen de la ventana acoplable de Nginx en el nodo. Finalmente, hay una etapa Prod con un simple paso de eco.

La canalización explicada anteriormente tiene etapas que tienen pasos simples para que comprenda cómo funciona. Una vez que aprenda a crear una canalización, puede agregar más complejidad y crear canalizaciones complejas también.

Una vez que tenga el código en la pestaña Canalización, haga clic en Aplicar y Guardar. Finalmente, haga clic en Construir ahora para comenzar a construir la tubería Jenkins que acaba de crear.

Construir ahora

Así es como se verá la interfaz de usuario cuando se ejecute la canalización. Si ha seguido todos los pasos correctamente, su compilación será exitosa y mostrará un color azul para la compilación (# 27). Si hay errores en la construcción, le dará color rojo (# 27).

Jenkins construir 27

Ahora haga clic en la compilación n. ° 27 y luego haga clic en Salida de consola para verificar qué sucedió exactamente en el back-end cuando se ejecutó.

Construcción de Jenkins

Así es como se verá la salida que termina con un mensaje SUCCESS.

Success Console Output

Started by user geekflare
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/First Pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo
Hi, GeekFlare. Starting to build the App.
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] input
Do you want to proceed?
Proceed or Abort
Approved by geekflare
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] parallel
[Pipeline] { (Branch: Deploy start )
[Pipeline] { (Branch: Deploying now)
[Pipeline] stage
[Pipeline] { (Deploy start )
[Pipeline] stage
[Pipeline] { (Deploying now)
[Pipeline] getContext
[Pipeline] isUnix
[Pipeline] sh
[Pipeline] echo
Start the deploy ..
[Pipeline] }
+ docker inspect -f . nginx
[Pipeline] // stage
[Pipeline] }

Error: No such object: nginx
[Pipeline] isUnix
[Pipeline] sh
+ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
8d691f585fa8: Pulling fs layer
5b07f4e08ad0: Pulling fs layer
abc291867bca: Pulling fs layer
abc291867bca: Verifying Checksum
abc291867bca: Download complete
5b07f4e08ad0: Verifying Checksum
5b07f4e08ad0: Download complete
8d691f585fa8: Verifying Checksum
8d691f585fa8: Download complete
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete
abc291867bca: Pull complete
Digest: sha256:922c815aa4df050d4df476e92daed4231f466acc8ee90e0e774951b0fd7195a4
Status: Downloaded newer image for nginx:latest
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 125:131 -w "/var/lib/jenkins/workspace/First Pipeline" -v "/var/lib/jenkins/workspace/First Pipeline:/var/lib/jenkins/workspace/First Pipeline:rw,z" -v "/var/lib/jenkins/workspace/First [email protected]:/var/lib/jenkins/workspace/First [email protected]:rw,z" -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** nginx cat
$ docker top 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943 -eo pid,comm
[Pipeline] {
[Pipeline] echo
Docker Created
[Pipeline] }
$ docker stop --time=1 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
$ docker rm -f 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Prod)
[Pipeline] echo
App is Prod Ready
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

El Jenkins Pipeline anterior ha creado una imagen acoplable de Nginx. Puede verificarlo ejecutando el siguiente comando. Puede ver que la imagen de la ventana acoplable de Nginx también aparece en la lista.

[email protected]:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 540a289bab6c 2 weeks ago 126MB
httpd latest 7d85cc3b2d80 2 months ago 154MB
redis latest f7302e4ab3a8 2 months ago 98.2MB
geekflare_mongodb latest 095d17727ca0 3 months ago 325MB

En resumen

Espero que esto te dé una idea de Oleoducto Jenkins beneficios y cómo puede crear uno. Lo anterior es una demostración simple y la mejor manera de aprender es intentando construir tuberías complejas.