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 campoUser/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 entrarJenkinsfile
- Seleccione
- 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.
- 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.
- 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.
- 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.