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

Resuelto sorin asked hace 54 años • 16 respuestas

Al escribir canalizaciones de jenkins, parece muy inconveniente confirmar cada nuevo cambio para ver si funciona.

¿Hay alguna manera de ejecutarlos localmente sin confirmar el código?

sorin avatar Jan 01 '70 08:01 sorin
Aceptado

No puede ejecutar un script de Pipeline localmente, ya que su único propósito es crear un script para Jenkins. (Esta es una de las razones por las que es mejor mantener un Jenkinsfilecódigo breve y limitado que realmente trate con las características de Jenkins; su lógica de compilación real debe manejarse con procesos externos o herramientas de compilación que invoque mediante una línea sho batun paso).

Si desea probar un cambio en Jenkinsfilevivo pero sin confirmarlo , use la función Repetir agregada en 1.14.

JENKINS-33925 rastrea la solicitud de funciones para un marco de prueba automatizado.

Jesse Glick avatar Mar 31 '2016 11:03 Jesse Glick

Tengo una solución que funciona bien para mí. 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 acceder a su repositorio de github o bitbucket para probar la canalización.

Esto sólo ha sido probado en un entorno Linux.

Es bastante sencillo hacer que esto funcione, aunque estas instrucciones son un poco largas. 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 ejecutándose en la ventana acoplable localmente. Explica cómo a continuación.
    • Los derechos adecuados (clave de acceso ssh) para que su usuario local de la ventana acoplable Jenkins los 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 git local. Explicado a continuación.
    • Un usuario de git en su Jenkins local con derechos mínimos. Explicado a continuación.
  • Un proyecto git con un webhook posterior a la confirmación que activa el proyecto de canalización. Explicado a continuación.

Así es como lo haces

Jenkins Docker

Cree un archivo llamado Dockerfile en el lugar que elija. Lo estoy colocando y /opt/docker/jenkins/Dockerfilerellénalo con esto:

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

Construya la imagen local_jenkins

Esto deberá hacerlo 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 creé un alias que puse en .bash_aliasesmi 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úrese de que la /opt/docker/jenkins/jenkins_homecarpeta exista y de que tenga derechos de lectura y escritura de usuario.

Para iniciar o reiniciar tu jenkins simplemente escribe:

$ 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 una clave de acceso ssh en tu Docker Jenkins

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

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

Ahora ha ingresado al contenedor de la ventana acoplable, esto lo puede ver en algo así como jenkins@e7b23bad10aa:/$en su terminal. El hash después de @ seguramente será diferente.

Crea la clave

jenkins@e7b23bad10aa:/$ ssh-keygen

Presione Intro en todas las preguntas hasta que reciba el mensaje.

Copie la clave a su computadora. Desde dentro del contenedor acoplable, su computadora es 172.17.0.1 si se lo pregunta.

jenkins@e7b23bad10aa:/$ ssh-copy-id [email protected]

usuario = 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ás que escribir tu contraseña en este punto.

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

jenkins@e7b23bad10aa:/$ ssh [email protected]

Esta vez no debería necesitar ingresar su contraseña. Si lo haces, algo salió mal y tendrás que volver a intentarlo.

Ahora estará en la carpeta de inicio de su computadora. Prueba lsy echa un vistazo.

No te detengas aquí ya que tenemos una cadena de shells ssh de los que debemos salir.

$ exit
jenkins@e7b23bad10aa:/$ exit

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

Instala tu Jenkins

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

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

Configura tus jenkins

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

  • Seleccionar Jenkins’ own user databasecomo ámbito de seguridad
  • Seleccione Matrix-based securityen la sección Autorización
  • Escribe tu nombre de usuario en el campo User/group to add:y haz clic en el [ Add ]botón
  • En la tabla de arriba, su nombre de usuario debería aparecer con un ícono de persona al lado. Si está tachado, escribiste tu nombre de usuario incorrectamente.
  • Vaya al extremo derecho de la tabla y haga clic en el botón de marcar todo o marque manualmente todas las casillas de su fila.
  • Verifique que la casilla de verificación Prevent Cross Site Request Forgery exploitsno esté marcada. (Dado que solo se puede acceder a Jenkins desde su computadora, esto no es gran cosa)
  • Haga clic [ Save ]y cierre sesión en Jenkins y vuelva a iniciarla solo para asegurarse de que funciona. Si no es así, tienes que empezar de nuevo desde el principio y vaciar la /opt/docker/jenkins/jenkins_homecarpeta antes de reiniciar.

Agrega el usuario de git

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

Dirija su navegador a http://localhost:8787/securityRealm/addUser y agréguelo gitcomo nombre de usuario y logincontraseñ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:

  • Escribe giten el campo User/group to add:y haz clic en[ Add ]

Ahora es el momento de marcar las casillas de derechos mínimos para el usuario de git. Sólo se necesitan estos:

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

Asegúrese de que la Prevent Cross Site Request Forgery exploitscasilla de verificación no esté marcada y haga clic en[ Save ]

Crear el proyecto de canalización

Suponemos que tenemos el nombre de usuario usery nuestro proyecto habilitado para git con el nombre Jenkinsfileen él se llama projecty está ubicado 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 Itemen el menú de Jenkins
  • Nombra el proyectohookpipeline
  • Haga clic en Tubería
  • Hacer clic[ OK ]
  • Marque la casilla de verificación Poll SCMen la sección Activadores de compilación. Deje el Horario vacío.
  • En la sección Tubería:
    • seleccionarPipeline script from SCM
    • en el Repository URLcampo ingresa[email protected]:projects/project/.git
    • en el Script Pathcampo ingresaJenkinsfile
  • Guarde el proyecto del hookpipeline
  • Construya el canal de enlace manualmente una vez; esto es necesario para que Poll SCM comience a funcionar.

Crea el gancho de git

Vaya a la /home/user/projects/project/.git/hookscarpeta y cree un archivo llamado post-commitque contenga 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 este archivo 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 se activó su proyecto de hookpipeline.

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!

javabeangrinder avatar Dec 06 '2017 10:12 javabeangrinder

TL;DR

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

La versión larga
de las pruebas de Jenkins Pipeline se vuelve cada vez más dolorosa. A diferencia del enfoque clásico de configuración de trabajos declarativos, donde el usuario estaba limitado a lo que la interfaz de usuario exponía, 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. El paso 1. debería 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 llama a las tareas de compilación en el orden correcto. La canalización de compilación simplemente organiza y ejecuta las tareas de compilación, pero no tiene ninguna lógica importante que requiera pruebas especiales.
  2. Si la regla anterior no se puede aplicar por completo, pase a las bibliotecas compartidas de Pipeline , donde puede desarrollar y probar lógica personalizada por sí sola e integrarla en la canalización.
  3. Si todo lo anterior 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 canalizaciones de Jenkins desde una herramienta de línea de comandos.

Ejemplos

El repositorio de PipelineUnit en GitHub contiene algunos ejemplos de Spock sobre cómo utilizar el marco de pruebas de Jenkins Pipeline Unit.

Vad1mo avatar Mar 18 '2017 14:03 Vad1mo