Integrar Git & Jenkins para Scripts de PowerShell Programados

Si tú y tu equipo tienen demasiados scripts de PowerShell por ahí, corriendo quién sabe dónde, este artículo es para ti. En este artículo, aprenderás cómo configurar el popular servidor de automatización Jenkins para administrar y ejecutar scripts de PowerShell.

Aprenderás cómo integrar el control de versiones Git con Jenkins para luego configurar y programar scripts de PowerShell para ejecutarse en horarios predefinidos.

La proliferación de scripts de PowerShell: Esto no está funcionando

Como ingeniero de automatización, uno de los principales desafíos que mi equipo y yo tuvimos que superar fue la proliferación de scripts de PowerShell programados. Encontré docenas de scripts de PowerShell programados y ejecutados desde muchos lugares diferentes.

Cada ingeniero, o equipo de ingenieros, tenía su propio servidor en el que programaban cosas. Cada tipo de script se ejecutaba en el servidor que ejecutaba ese servicio.

  • A domain controller ran all of the Active Directory scripts.
  • Un servidor de Exchange ejecutaba todos los scripts de Exchange.
  • A member server ran all networking team scripts.
  • A member server ran all of the database scripts for the DBAs.
  • A member server ran all of the security team’s scripts.
  • …y así sucesivamente

Todo el código que se ejecutaba en cualquiera de estos servidores se guardaba como un archivo de script en un directorio temporal en ese servidor o como una carpeta de scripts en una unidad compartida. ¡Era una pesadilla!

Aunque no lo creas, en su mayor parte, este sistema funcionaba bien. Los scripts se ejecutaban según lo deseado y de todos modos teníamos copias de seguridad en todos los servidores. Nunca se perdió ningún código.

Es comprensible que todos estuvieran contentos con este statu quo. Mejorar este sistema no era una prioridad en la lista.

Pero este sistema no estaba exento de sus fallas. Si bien satisfacía las necesidades de algunos ingenieros, no era capaz de escalar ni de ser fácilmente mantenible para siempre. Este sistema tampoco permitía ninguna flexibilidad en las tareas programadas. Esta rigidez llevó a diez versiones del mismo script (con pequeñas ediciones) siendo programadas.

Ingresa Jenkins.

¿Por qué Jenkins?

De todas las opciones que tienes para programar y ejecutar scripts de PowerShell, ¿por qué elegir Jenkins? Usar un servidor Jenkins para ejecutar scripts de PowerShell proporciona muchos beneficios. Aquí hay algunos puntos destacados:

Mejor Control

Una vez que tienes todos tus scripts de PowerShell en un solo lugar, no hay que preguntarse en qué servidor se ejecuta un script. Ahora puedes olvidarte de ese script que escribiste hace dos años y que ahora está desactualizado y bloqueando alguna cuenta de servicio.

Puedes organizar los scripts en una estructura de carpetas fácilmente navegable, controlar exactamente dónde se ejecutan todos tus scripts y incluso utilizar pipelines para dividir scripts monolíticos grandes en fragmentos modulares más pequeños que se pueden reutilizar en múltiples trabajos.

Programación Fácil

Con Jenkins, tienes un lugar central único con soporte completo para programar la ejecución de scripts de PowerShell. Puedes programar diferentes scripts para que se ejecuten en diferentes momentos con diferentes parámetros, tener una interfaz gráfica de usuario web agradable para administrar horarios y más.

Control de Versiones

Tener scripts de PowerShell bajo algún tipo de control de versiones resuelve muchos problemas diferentes. Uno de ellos es la capacidad de integrarse con herramientas como Jenkins. Jenkins puede integrarse con Git y otros productos de control de versiones para extraer automáticamente la última versión.

Registro Consolidado

Cuando los scripts de PowerShell están dispersos por todas partes y crean registros, estos registros pueden estar dispersos por todas partes. Con Jenkins, obtienes un excelente registro en una ventana de salida legible en un sitio web en lugar de tener que buscar en algún archivo de registro que haya creado tu tarea programada.

Prerrequisitos/Requisitos

Este artículo será una guía sobre cómo configurar Jenkins para ejecutar scripts de PowerShell. Como tal, necesitarás algunas cosas para seguir adelante.

Instalación del Plugin de PowerShell

Para ejecutar scripts de PowerShell con Jenkins, tendrás que instalar el complemento de PowerShell. Para hacerlo, en la página principal:

  1. Haz clic en Administrar Jenkins y luego en Administrar complementos.
  2. Haz clic en la pestaña Disponibles.
  3. En el lado derecho de la pantalla, escribe powershell en el cuadro Filtrar. Deberías ver aparecer el complemento de PowerShell como se muestra a continuación.
Looking for the PowerShell extension

4. Selecciona la casilla Instalar y haz clic en Instalar sin reiniciar.

5. La instalación del complemento de PowerShell creará una opción de paso de construcción de Windows PowerShell cuando proporcione el script de PowerShell para ejecutar un poco más tarde.

Creación de un trabajo

Jenkins tiene un concepto de trabajos. Un trabajo es un conjunto de instrucciones que puedes proporcionar a Jenkins para saber qué scripts ejecutar, qué horarios seguir, etc. Crearás un trabajo en esta sección que ejecutará un script de PowerShell. Para hacerlo, configurarás un trabajo que clonará un repositorio de Git en Jenkins.

  1. Una vez iniciada la sesión en Jenkins, haz clic en Nuevo elemento en la esquina superior derecha.
New Item menu option

2. A continuación, se te mostrará la pantalla que se muestra a continuación. Selecciona Proyecto de estilo libre. Este tipo de trabajo permitirá la mayor flexibilidad.

Creating a new Jenkins project

3. Da al trabajo el nombre Hola Mundo y haz clic en Aceptar.

Using Hello World for the project name

4. Ahora deberías estar en la pantalla de Configuración del trabajo. Ahora deberías ver una sección llamada Control de código fuente como se muestra a continuación. Esto te permite especificar qué repositorio Git clonará Jenkins para ponerlo a disposición del trabajo. Para esta demo, elige Git.

Source Code Management option

5. Cuando hagas clic en Git, ahora deberías ver una opción que te pide la información de tu repositorio Git. Este es el repositorio Git que contiene tus scripts de PowerShell.

Setting the Git repo

A continuación se muestra un desglose de cada campo:

  • URL del Repositorio – La URL que apunta al repositorio de Git. En TFS, por ejemplo, la URL puede verse así: *http://NOMBRE_SERVIDOR:8080/tfs//Messaging/_git/Dynamic Distro List*
  • Credenciales – Un nombre de usuario/contraseña que tiene acceso al repositorio. Si aún no tiene una credencial configurada, puede crear una haciendo clic en Agregar.
  • Nombre – Esto puede dejarse en blanco.
  • Refspec – Esto puede dejarse en blanco.
  • Especificador de Rama – Esto le permite elegir qué rama desea usar este trabajo. Por defecto, va a extraer la rama master, pero si tiene otra rama de prueba que desea usar, puede especificarla aquí.

También puede clonar más de un repositorio para un trabajo usando el botón Agregar Repositorio arriba. Esto es útil si tiene módulos u otras dependencias que necesita en un repositorio separado.

Agregando el Paso de Compilación de Windows PowerShell

Quizás tenga un script en la raíz de la rama maestra del repositorio Git llamado Hello World.ps1. Dentro de este script, tiene una sola línea:

Write-Host "Hello World, I'm a Jenkins build!"

Le gustaría ejecutar este script cuando se ejecute el trabajo. Para hacerlo, tendrá que crear un paso de compilación.

Jenkins le permite especificar numerosos pasos de compilación por trabajo. Para sus propósitos, necesita agregar un paso de compilación de Windows PowerShell. Para hacerlo, en la pantalla de configuración del trabajo:

  1. Haga clic en el botón Agregar paso de compilación y elija Windows PowerShell.
Windows PowerShell Build step

2. Dentro del cuadro de Comando, importa el script de PowerShell ubicado en tu repositorio de Git como se muestra a continuación. Puedes ver que estamos usando una variable de entorno de PowerShell llamada WORKSPACE. Esta variable representa el directorio de trabajo actual (la carpeta raíz del repositorio de Git).

Running the Hello World.ps1 script

3. Ahora haz clic en Guardar para guardar el trabajo.

¡Ahora deberías tener configurado un trabajo para invocar un script de PowerShell desde un repositorio de Git!

Ejecución del Script de PowerShell

Ahora que has creado un trabajo, ejecútalo y echa un vistazo a la salida.

  1. Asegúrate de estar en la pantalla principal del trabajo. Si usaste el nombre Hello World para este trabajo, la URL predeterminada será http://localhost:8080/job/Hello world/.
  2. En la pantalla principal del trabajo, haz clic en Construir Ahora en el lado izquierdo como se muestra a continuación.
Running the build

Hacer clic en Construir Ahora lanza inmediatamente una construcción del trabajo actual. Para trabajos que son complejos y tardan un tiempo en ejecutarse, tendrás la capacidad de hacer clic en la construcción y ver la salida en tiempo real mientras se ejecuta. En este caso, sin embargo, el trabajo se ejecutará prácticamente al instante.

4. Para ver los resultados, haz clic en la marca de verificación verde junto a la construcción.

Inspecting build results

Si todo salió según lo planeado, verás algo como lo siguiente en tu salida:

Build log results

Programaciones y Disparadores

Ahora tienes un trabajo que puede ejecutarse cuando sea necesario y que produce el mensaje Hola Mundo. Pero uno de los principales puntos de venta de Jenkins es reemplazar las tareas programadas. No queremos tener que entrar y ejecutarlo manualmente. Si reabres ese trabajo, verás una sección llamada Disparadores de Construcción.

Available build triggers

Estas son tus opciones para hacer que un trabajo se ejecute sin necesidad de hacer clic en Construir Ahora en Jenkins.

Creando una Programación

Hay algunas opciones diferentes para crear disparadores. En este ejemplo, mantengámoslo simple.

  1. Selecciona Construir periódicamente. Este disparador te permite programar trabajos usando una sintaxis de programación similar a cron.

2. Establece que el trabajo se ejecute a las 7:30 a.m. los lunes, miércoles y viernes como se muestra a continuación.

Setting schedule to 7:30AM MWF

3. Guarda los cambios y espera.

Cuando llegue la fecha y hora asignadas, verás que el script se ejecutó según lo deseado en Historial de Construcción.

Build running on schedule

Ahora tienes un script de PowerShell programado en Jenkins que se ejecutará en un intervalo recurrente.

Lectura Adicional

Source:
https://adamtheautomator.com/powershell-jenkins/