Flujo de trabajo de Jenkins creación de secuencias de comandos complejas

En esta segunda y última parte de la serie, analizaremos el plugin Jenkins Workflow como una solución para configurar tuberías Jenkins más complejas..

Continuaremos donde se detuvo la primera parte de la serie. En la primera parte, Jeff Reifman lo guió a través de la configuración de una instancia de Jenkins en Digital Ocean y la creación de su primera compilación de Jenkins. Si aún no lo ha leído, le sugiero que lo haga antes de continuar. Está bien, voy a esperar. Puedo ser muy paciente ...

… ¿Todo atrapados? ¡Genial! Hagámoslo.

¿Qué es el flujo de trabajo de Jenkins??

Jenkins Workflow es un complemento para Jenkins. Una vez instalado, un nuevo tipo de elemento estará disponible: un "Flujo de trabajo". Los proyectos de flujo de trabajo se pueden usar para los mismos propósitos que los proyectos Jenkins "Freestyle" regulares, pero también tienen la capacidad de organizar tareas mucho más grandes que pueden abarcar varios proyectos, e incluso crear y administrar múltiples áreas de trabajo en un solo flujo de trabajo. Además, toda esta administración se puede organizar en un solo script, en lugar de extenderse a través de una colección de configuraciones, proyectos y pasos..

El Pre-Workflow

Antes de que podamos comenzar a crear flujos de trabajo, debemos instalar el complemento de flujo de trabajo de Jenkins. Desde el panel de Jenkins, haga clic en Manejar jenkins, entonces Administrar complementos. Cambiar a la Disponible pestaña y busca "Workflow".

Marque la casilla para Complemento de flujo de trabajo, entonces Instalar sin reiniciar.

Ahora, aquí está la trampa. Hay varios complementos llamados "Complemento de flujo de trabajo", por lo que deberá repetir los pasos anteriores varias veces. Alternativamente, también puede hacer clic en las múltiples casillas de verificación o instalar el complemento Agregador de flujo de trabajo.

Una vez que el "Complemento de flujo de trabajo" ya no aparezca en la lista de complementos disponibles, continúe y reinicie Jenkins navegando a /reiniciar y haciendo clic .

Un flujo simple

Vamos a mojar nuestros pies de flujo de trabajo. Tomaremos el proyecto que Jeff configuró en la primera parte y lo construiremos como un flujo de trabajo..

Para comenzar, diríjase al Panel de Jenkins y haga clic en Nuevo artículo. Nombre el nuevo elemento "Prueba de Shell (flujo de trabajo)" y seleccione Flujo de trabajo tipo.

Hacer clic DE ACUERDO Para crear el nuevo proyecto. Llegarás a la página de configuración del proyecto..

Notará que las opciones de configuración difieren de los proyectos estándar de Jenkins. Ya no hay opciones para agregar un repositorio de GitHub, pasos de compilación o acciones posteriores a la compilación. En su lugar, hay una nueva sección llamada Flujo de trabajo.

Dentro de la sección Flujo de trabajo hay un cuadro de texto etiquetado Guión. Ahí es donde estará definiendo el script de flujo de trabajo que Jenkins ejecutará cuando inicialice una compilación del proyecto.

“¿Qué tipo de guión?” Preguntas. Excelente pregunta. El complemento Jenkins Workflow utiliza un lenguaje llamado Groovy para sus scripts. Groovy es un lenguaje de scripting versátil para la JVM. No se preocupe, realmente no necesita conocer Groovy o Java para que las cosas funcionen. El complemento Jenkins Workflow usa un DSL pequeño encima de Groovy, y es muy fácil combinar comandos para desarrollar el flujo de trabajo de su proyecto..

Continúe y agregue lo siguiente al cuadro de secuencia de comandos:

java node git 'https://github.com/redhotvengeance/hello-jenkins.git' sh 'uptime'

Entonces, ¿qué está pasando aquí??

En primer lugar, abrimos un nodo bloquear. Los nodos son donde ocurren las acciones de flujo de trabajo. Cuando asignas un nodo, se crea un nuevo espacio de trabajo (un contexto / carpeta). Todo el código dentro del nodo el bloque se ejecuta dentro de ese espacio de trabajo. Esto ayuda a garantizar que los pasos de compilación no se contaminen entre sí..

A continuación, ejecutamos un comando Git con git 'https://github.com/redhotvengeance/hello-jenkins.git'. Este comando clona el repositorio de Git en nuestro espacio de trabajo.

Por último, le decimos a Workflow que ejecute el tiempo de actividad comando de shell con sh 'uptime'.

Hacer clic Salvar, y serás llevado a la página de inicio del proyecto. En el menú de la izquierda hay un botón etiquetado. Construir ahora. Haz clic para iniciar una construcción..

Una vez que la compilación está completa, haga clic en compilar # 1 encontrado en el Construir historia sección. Entonces haga clic Salida de consola en el menú de la izquierda.

Aquí podemos ver todo lo registrado mientras se ejecutaba la construcción. Comenzó asignando un nodo en el área de trabajo "Prueba de Shell (flujo de trabajo)". Luego buscó el repositorio de Git. Por último, ejecutó la tiempo de actividad shell script, que imprimió las estadísticas de tiempo de actividad del servidor.

¡Y eso es! Ahora hemos recreado los mismos pasos que la configuración normal del proyecto Jenkins en la primera parte, excepto esta vez como un flujo de trabajo. Ahora usemos estos mismos conceptos para hacer algo un poco más complejo..

Fingir hasta que lo hagas

Antes de que podamos crear nuestro complejo flujo de trabajo, necesitamos el trabajo que fluirá a través de él. Proyecto (s) falso al rescate.!

Ya que estamos usando Groovy para crear un script de nuestro flujo de trabajo, usemos Gradle para nuestros proyectos falsos. Gradle es un sistema de compilación que usa Groovy (¡sorprendente, lo sé!). Para usar Gradle, necesitaremos instalarlo en nuestro servidor. SSH en su servidor (consulte la primera parte de Jeff si necesita actualizar su memoria) y ejecute:

shell sudo apt-get install gradle

Hay-estamos bien para ir.

Usaremos dos repositorios en nuestro nuevo flujo de trabajo. El primero es el constructor. Nuestro proyecto de constructor es muy simple: tiene un script de compilación de Gradle con el siguiente código:

tarea maravillosa crearBuild << new File("built.txt").write("You cannot pass.\n")

Entonces, ¿qué está pasando aquí? Gradle funciona ejecutando “tareas”, y el script de compilación de Gradle define estas tareas. Hemos definido una tarea llamada crearBuild, Y lo que hace es crear un archivo de texto llamado built.txt con el contenido:

No puede pasar.

Eso es. (Bueno, yo hizo decir que era simple!)

El segundo repositorio de Git es nuestro empaquetador. El empaquetador también tiene un script de compilación de Gradle, pero es un poco más complejo:

tarea maravillosa createPackage << String packageText = "I am a servant of the Secret Fire, wielder of the flame of Anor. You cannot pass. The dark fire will not avail you, flame of Udûn. Go back to the Shadow!" String builtText = new File('built.txt').text new File("package.txt").write(packageText + "\n\n" + builtText)

los crear paquete tarea también crea un archivo de texto (llamado package.txt), pero espera usar contenido de built.txt, que no existe en el repositorio de empaquetado. Si built.txt Existió en el repositorio, el generado. package.txt contendría:

Soy un sirviente del Fuego Secreto, portador de la llama de Anor. No puede pasar. El fuego oscuro no te servirá, llama de Udûn. Volver a la sombra!

No puede pasar.

Si built.txt falta, nuestro crear paquete tarea arrojará un error.

Así que cada vez que construimos nuestro empaquetador, primero debemos ejecutar nuestro constructor y hacer el resultado built.txt disponible para el empaquetador para que pueda crear package.txt.

Y eso es exactamente lo que vamos a configurar un flujo de trabajo Jenkins para hacer!

Deja que el trabajo fluya a través de ti

Dirígete al panel de Jenkins, haz clic Nuevo artículo, llámalo "Ensamblador", selecciona Flujo de trabajo, y haga clic DE ACUERDO.

Vamos a empezar a escribir. Primero, abriremos un nodo Bloque, al igual que antes:

"nodo java

"

A continuación, vamos a clonar nuestro repo constructor:

nodo de Java git 'https://github.com/redhotvengeance/jenkins-workflow-build.git'

Ahora necesitamos ejecutar nuestro script de compilación Gradle para generar el built.txt expediente:

java node git 'https://github.com/redhotvengeance/jenkins-workflow-build.git' sh 'gradle createBuild'

Finalmente, asegurémonos de que todo funcione como esperamos. Añadiremos un gato para imprimir el contenido de la built.txt expediente:

java node git 'https://github.com/redhotvengeance/jenkins-workflow-build.git' sh 'gradle createBuild' sh 'cat ./built.txt'

Hacer clic Salvar, y luego comenzar una compilación. Una vez hecho esto, eche un vistazo a la Salida de consola.

¡Excelente! Estamos exitosamente clonando el repositorio, ejecutando el crearBuild tarea, y han confirmado que el contenido de built.txt es No puede pasar.. Ahora al empaquetador.

Al igual que con el constructor, necesitamos clonar nuestro repositorio de empaquetadores. Agreguemos el código del empaquetador:

"java node git 'https://github.com/redhotvengeance/jenkins-workflow-build.git' sh 'gradle createBuild' sh 'cat ./built.txt'

node git 'https://github.com/redhotvengeance/jenkins-workflow-package.git' sh 'gradle createPackage' sh 'cat ./package.txt' "

Como no creamos explícitamente un nuevo espacio de trabajo, crear paquete tarea se ejecutará en el mismo espacio de trabajo como el crearBuild tarea, lo que significa que el built.txt El archivo que el empaquetador está esperando estará disponible para él..

Siga adelante y Salvar y Construir ahora, y luego ver el Salida de consola.

Todo funcionó como se esperaba: nuestro constructor fue clonado y ejecutado, y nuestro empaquetador fue clonado y ejecutado. Y si nos fijamos en la salida, ¡ahí está! El Balrog de Morgoth ha sido totalmente Gandalf'd..

Genial, pero no es esto un poco ...

¿Logrado? Definitivamente.

Pero un concepto complejo es en realidad solo un montón de conceptos simples combinados. En la superficie, reunimos el discurso de Gandalf en el puente de Khazad-dûm. Pero realmente, tomamos la salida de compilación de un proyecto y la inyectamos en la salida de compilación de otro proyecto.

¿Qué pasaría si, en lugar del diálogo de Gandalf, los resultados de la compilación fueran ejecutables de bases de código separadas que deben ensamblarse para el software que se envía? Usaría el mismo flujo de trabajo que configuramos aquí: clonación, creación, copia y empaquetado. Con el complemento Jenkins Workflow, todo lo que necesitó fueron algunas líneas de Groovy. Y como beneficio adicional, todo está contenido en un solo script!

También hay otras herramientas disponibles para ayudar a administrar y visualizar un flujo de trabajo de Jenkins. CloudBees ofrece una función Workflow Stage View en su plataforma Jenkins empresarial.

Esto solo araña la superficie de lo que se puede hacer con el complemento Jenkins Workflow. Asegúrese de revisar los enlaces relacionados a continuación para obtener más información.

Buena suerte haciendo que tu trabajo fluya!

enlaces relacionados

  • Sitio web de Jenkins
  • Página de complemento de flujo de trabajo de Jenkins
  • Jenkins Workflow Plugin GitHub Página
  • Tutorial Jenkins Workflow Plugin
  • Docs de plugin de flujo de trabajo de CloudBees Jenkins
  • Video tutorial de Jenkins Workflow Plugin