Saltar al contenido

¿Cómo puedo probar un cambio realizado en Jenkinsfile localmente?

Encontramos el hallazgo a este enigma, o por lo menos eso deseamos. Si presentas inquietudes deja tu comentario y con placer te responderemos

Solución:

No puede ejecutar el script de Pipeline localmente, ya que su único propósito es crear un script de Jenkins. (Cuál es una de las razones por las que es mejor mantener su Jenkinsfile breve y limitado al código que en realidad se ocupa de las funciones de Jenkins; su lógica de compilación real debe manejarse con procesos externos o herramientas de compilación que puede invocar a través de un diagrama unifilar sh o bat paso.)

Si desea probar un cambio en Jenkinsfile vivir pero sin cometiendo eso, usa el Repetición característica agregada en 1.14

JENKINS-33925 rastrea lo deseado para un marco de prueba automatizado.

Tengo una solución que me funciona bien. Consiste en un jenkins local que se ejecuta en la ventana acoplable y un gancho web de git para activar la canalización en el jenkins local en cada confirmación. Ya no necesita enviar a su repositorio de github o bitbucket para probar la canalización.

Esto solo se ha probado en un entorno Linux.

Es bastante simple hacer que esto funcione, aunque esta instrucción es un poco larga. La mayoría de los pasos están ahí.

Esto es lo que necesitas

  • Docker instalado y funcionando. Esto no es parte de esta instrucción.
  • Un Jenkins que se ejecuta en la ventana acoplable de forma local. Explica cómo a continuación.
    • Los derechos adecuados (acceso ssh key) para que el usuario de la ventana acoplable de Jenkins local lo extraiga de su repositorio de git local. Explica cómo a continuación.
    • Un proyecto de canalización de Jenkins que se extrae de su repositorio de git local. Explicado a continuación.
    • Un usuario de git en su Jenkins local con derechos mínimos. Explicado a continuación.
  • Un proyecto de git con un enlace web posterior a la confirmación que activa el proyecto de canalización. Explicado a continuación.

Asi es como lo haces

Jenkins Docker

Cree un archivo llamado Dockerfile en lugar de su elección. Lo estoy colocando en /opt/docker/jenkins/Dockerfile llénelo con esto:

FROM jenkins/jenkins:lts
USER root
RUN apt-get -y update && apt-get -y upgrade
# Your needed installations goes here
USER jenkins

Construye la imagen local_jenkins

Deberá hacer esto solo una vez o después de haber agregado algo al Dockerfile.

$ docker build -t local_jenkins /opt/docker/jenkins/

Iniciar y reiniciar local_jenkins

De vez en cuando desea iniciar y reiniciar jenkins fácilmente. Por ejemplo, después de reiniciar su máquina. Para esto hice un alias que puse en .bash_aliases en mi carpeta de inicio.

$ echo "alias localjenkinsrestart='docker stop jenkins;docker rm jenkins;docker run --name jenkins -i -d -p 8787:8080 -p 50000:50000 -v /opt/docker/jenkins/jenkins_home:/var/jenkins_home:rw local_jenkins'" >> ~/.bash_aliases
$ source .bash_aliases  # To make it work

Asegúrate que /opt/docker/jenkins/jenkins_home existe la carpeta y que tiene derechos de lectura y escritura de usuario sobre ella.

Para iniciar o reiniciar su jenkins, simplemente escriba:

$ localjenkinsrestart

Todo lo que haga en su jenkins local se almacenará en la carpeta / opt / docker / jenkins / jenkins_home y se conservará entre reinicios.

Crea un acceso ssh key en tu docker jenkins

Esta es una parte muy importante para que esto funcione. Primero iniciamos el contenedor de la ventana acoplable y le creamos un shell bash:

$ localjenkinsrestart
$ docker exec -it jenkins /bin/bash

Ahora ha entrado en el contenedor de la ventana acoplable, esto se puede ver con algo como [email protected]:/$ en tu terminal. El hash después de @ seguramente será diferente.

Crea el key

[email protected]:/$ ssh-keygen

Presione Intro en todas las preguntas hasta que vuelva a recibir el mensaje.

Copia el key a tu computador. Desde dentro del contenedor de la ventana acoplable, su computadora es 172.17.0.1 si se lo pregunta.

[email protected]:/$ ssh-copy-id [email protected]

user = su nombre de usuario y 172.17.0.1 es la dirección IP de su computadora desde el contenedor de la ventana acoplable.

Tendrá que escribir su contraseña en este punto.

Ahora intentemos completar el ciclo mediante ssh-ing a su computadora desde el contenedor de la ventana acoplable.

[email protected]:/$ ssh [email protected]

Esta vez no debería necesitar ingresar su contraseña. Si lo hace, algo salió mal y debe intentarlo de nuevo.

Ahora estará en la carpeta de inicio de su computadora. Tratar ls y echa un vistazo.

No se detenga aquí ya que tenemos una cadena de shells ssh de la que tenemos que salir.

$ exit
[email protected]:/$ exit

¡Derecha! Ahora estamos de regreso y listos para continuar.

Instale su Jenkins

Encontrará su Jenkins local en su navegador en http: // localhost: 8787.

La primera vez que apunte su navegador a su Jenkins local, recibirá un asistente de instalación. Los valores predeterminados están bien, sin embargo, asegúrese de instalar el complemento de canalización durante la configuración.

Configura tus jenkins

Está muy importante que active la seguridad basada en matrices en http: // localhost: 8787 / configureSecurity y date todos los derechos agregándose a la matriz y marque todas las casillas. (Hay un icono de marcar todas las casillas en el extremo derecho)

  • Seleccione Jenkins’ own user database como el reino de la seguridad
  • Seleccione Matrix-based security en la sección Autorización
  • Escriba su nombre de usuario en el campo User/group to add: y haga clic en el [ Add ] botón
  • En la tabla de arriba, su nombre de usuario debería aparecer con un ícono de personas al lado. Si está tachado, escribió su nombre de usuario incorrectamente.
  • Vaya al extremo derecho de la tabla y haga clic en el botón marcar todos o marque manualmente todas las casillas de su fila.
  • Verifique que la casilla de verificación Prevent Cross Site Request Forgery exploits no está marcado. (Dado que solo se puede acceder a este Jenkins desde su computadora, esto no es tan importante)
  • Haga clic en [ Save ] y cierre la sesión de Jenkins y vuelva a iniciarla solo para asegurarse de que funcione.
    Si no es así, tiene que empezar de nuevo desde el principio y vaciar el /opt/docker/jenkins/jenkins_home carpeta antes de reiniciar

Agregar el usuario de git

Necesitamos permitir que nuestro gancho de git inicie sesión en nuestro Jenkins local con derechos mínimos. Basta con ver y crear puestos de trabajo. Por eso creamos un usuario llamado git con contraseña login.

Dirija su navegador a http: // localhost: 8787 / securityRealm / addUser y agregue git como nombre de usuario y login como contraseña. Haga clic en [ Create User ].

Agregue los derechos al usuario de git

Vaya a la página http: // localhost: 8787 / configureSecurity en su navegador. Agregue el usuario de git a la matriz:

  • Escribir git en el campo User/group to add: y haga clic en [ Add ]

Ahora es el momento de marcar las casillas de derechos mínimos para el usuario de git. Solo estos son necesarios:

  • en general: leer
  • trabajo: construir
  • trabajo: descubrir
  • trabajo: leer

Asegúrese de que el Prevent Cross Site Request Forgery exploits la casilla de verificación está desmarcada y haga clic en [ Save ]

Crea el proyecto de canalización

Asumimos que tenemos el nombre de usuario user y nuestro proyecto habilitado para git con el Jenkinsfile en se llama project y se encuentra en /home/user/projects/project

En su http: // localhost: 8787 Jenkins agregue un nuevo proyecto de canalización. Lo llamé hookpipeline como referencia.

  • Haga clic en New Item en el menú de Jenkins
  • Nombra el proyecto hookpipeline
  • Haga clic en Pipeline
  • Hacer clic [ OK ]
  • Marque la casilla de verificación Poll SCM en la sección Build Triggers. Deje el horario vacío.
  • En la sección Pipeline:
    • Seleccione Pipeline script from SCM
    • en el Repository URL campo entrar [email protected]:projects/project/.git
    • en el Script Path campo entrar Jenkinsfile
  • Guarde el proyecto hookpipeline
  • Construya el hookpipeline manualmente una vez, esto es necesario para que Poll SCM comience a funcionar.

Crea el gancho de git

Ve a la /home/user/projects/project/.git/hooks carpeta y cree un archivo llamado post-commit que contiene esto:

#!/bin/sh
BRANCHNAME=$(git rev-parse --abbrev-ref HEAD)
MASTERBRANCH='master'

curl -XPOST -u git:login http://localhost:8787/job/hookpipeline/build
echo "Build triggered successfully on branch: $BRANCHNAME"

Haga que este archivo sea ejecutable:

$ chmod +x /home/user/projects/project/.git/hooks/post-commit

Pruebe el gancho posterior a la confirmación:

$ /home/user/projects/project/.git/hooks/post-commit

Verifique en Jenkins si su proyecto de hookpipeline se activó.

Finalmente, realice algún cambio arbitrario en su proyecto, agregue los cambios y realice una confirmación. Esto ahora activará la canalización en su Jenkins local.

¡Días felices!

TL; DR

  • Marco de prueba de Jenkins Pipeline Unit
  • Corredor de Jenkinsfile

Versión larga

Las pruebas de Jenkins Pipeline se vuelven cada vez más molestas. A diferencia del clásico Enfoque de configuración de trabajo declarativo donde el usuario estaba limitado a lo que la interfaz de usuario expuso, el nuevo Jenkins Pipeline es un lenguaje de programación completo para el proceso de compilación en el que se mezcla la parte declarativa con su propio código. Como buenos desarrolladores, también queremos tener algunas pruebas unitarias para este tipo de código.

Hay tres pasos que debe seguir al desarrollar Jenkins Pipelines. los paso 1. debe cubrir el 80% de los casos de uso.

  1. Haga todo lo posible en los scripts de compilación (por ejemplo, Maven, Gradle, Gulp, etc.). Luego, en los scripts de su canalización, simplemente llame a las tareas de compilación en el orden correcto. La canalización de compilación solo organiza y ejecuta las tareas de compilación, pero no tiene ninguna lógica importante que necesite una prueba especial.
  2. Si la regla anterior no se puede aplicar por completo, pase a las bibliotecas compartidas de canalización, donde puede desarrollar y probar la lógica personalizada por sí sola e integrarla en la canalización.
  3. Si todo lo anterior le falla, puede probar una de esas bibliotecas que aparecieron recientemente (marzo de 2017). Marco de prueba de Jenkins Pipeline Unit o pipelineUnit (ejemplos). Desde 2018 también existe Jenkinsfile Runner, un paquete para ejecutar pipelines Jenkins desde una herramienta de línea de comandos.

Ejemplos de

El repositorio de pipelineUnit GitHub contiene algunos ejemplos de Spock sobre cómo usar el marco de prueba de Jenkins Pipeline Unit

Comentarios y calificaciones

No se te olvide recomendar esta noticia si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *