Introducción
Fieldlight Studio tiene tres fotografías de jardín para compartir. Los originales están listos, pero su gran tamaño resulta poco práctico para una revisión rápida. Utilizarás una herramienta de imágenes preparada para crear vistas previas pequeñas y una hoja de contactos: una imagen que muestra toda la colección de un vistazo.
La herramienta está instalada en un agente de Jenkins conectado. Tu primera tarea es elegir el agente que realmente puede realizar el trabajo. Después atenderás un requisito de entrega de menor tamaño, conservarás ambas versiones correctas y mantendrás a salvo las fotografías originales.
Los requisitos previos son la navegación por las páginas de Jenkins y el reconocimiento de un Pipeline declarativo breve. No se requiere programar en Java, conocer comandos de edición fotográfica, administrar Docker ni instalar agentes. Los programas proporcionados y las conexiones de los agentes están preparados. Los dos agentes son contenedores separados en una única máquina virtual de prácticas: sus sistemas de archivos son independientes, pero comparten su núcleo. No se trata de una flota en la nube. Fieldlight es ficticio y las fotografías son materiales de estudio generados por IA. La duración es una estimación del autor, no un tiempo medido con principiantes.
Asigna el trabajo al agente adecuado
En este paso inspeccionarás los originales, observarás un fallo esperado por falta de una herramienta y programarás el trabajo en el agente capaz de procesar imágenes. Empieza en Photo Desk.
La colección Garden Stories muestra lavanda, un sendero de jardín y una regadera. Abre cada fotografía, inspecciona su original completo y usa la acción Back del navegador para volver al escritorio. Selecciona Download original para la fotografía de lavanda y consérvala para compararla. Los originales tienen 1536 píxeles de ancho y deben permanecer sin cambios. El escritorio indica inicialmente No completed collection yet.
Cambia a Jenkins. El controlador de Jenkins guarda la configuración de los trabajos y coordina las ejecuciones. Un agente es un proceso conectado que realiza el trabajo de las ejecuciones. Un nodo es su entrada configurada en Jenkins. Un ejecutor es una plaza de trabajo disponible en ese nodo. Aquí cada agente tiene un ejecutor, por lo que puede realizar un bloque de trabajo asignado a la vez.
Desde el panel principal, selecciona Manage Jenkins y luego Nodes. Inspecciona image-studio y pack-studio por turnos. Ambos están conectados. Sus etiquetas de capacidad son photo-imaging y photo-packing; ambos tienen también linux. Una etiqueta es una condición de programación, no un instalador de software. La herramienta de imágenes solo existe en image-studio; la herramienta de empaquetado solo existe en pack-studio. Son procesos de agente y contenedores realmente separados.
Vuelve al panel principal mediante el logotipo Jenkins de la esquina superior izquierda y abre preview-photos. Selecciona Configure y luego la sección Pipeline. El editor Script contiene el trabajo preparado. Lee su estructura antes de cambiar nada:
agent noneal principio significa que el Pipeline completo no reserva un agente. La etapa elige su propio agente.stage('Prepare photos')da nombre al trabajo. Suagent { label 'photo-packing' }solicita actualmente la capacidad de empaquetado.stepscontiene operaciones.shejecuta el comando entre comillas en el shell del agente seleccionado. El programa proporcionado/opt/fieldlight/prepare-photoscrea vistas previas;--width 480solicita un ancho de 480 píxeles y conserva la relación de aspecto original. Las comillas simples mantienen ese comando como una sola cadena de Groovy.deleteDir()vacía el espacio de trabajo asignado a este trabajo, el directorio temporal donde se encuentran los archivos de su ejecución. La primera llamada permite empezar con un espacio limpio. En la secciónpost, la llamadaalwaysvacía el espacio de trabajo después de la etapa, incluso tras un fallo. No elimina los originales de/opt/fieldlight/originals.archiveArtifactsconserva en Jenkins los archivos que coinciden antes de la limpieza. Enprepared/**,**incluye archivos de directorios anidados.fingerprint: trueregistra sus identidades de archivo para permitir su rastreo; no es una aprobación del cliente ni una firma.
Vuelve a la página del trabajo sin editar el script. Selecciona Build Now una vez. Abre la nueva ejecución numerada en Build History y selecciona Console Output. Espera a que termine. Este primer fallo es esperado: la consola identifica pack-studio, después informa de que /opt/fieldlight/prepare-photos no se ha encontrado con el mensaje not found y termina en FAILURE. El agente solicitado está conectado, pero carece de la herramienta de este rol. Esto es diferente de esperar indefinidamente por un agente desconectado o que no coincide con la etiqueta.
Vuelve a preview-photos, selecciona Configure y abre Pipeline de nuevo. Cambia únicamente la etiqueta de la etapa de photo-packing a photo-imaging. Para disponer de una versión completa que puedas copiar, haz clic dentro de Script, selecciona todo con Ctrl+A en Windows/Linux o Command+A en macOS y sustituye el contenido por:
pipeline {
agent none
stages {
stage('Prepare photos') {
agent { label 'photo-imaging' }
steps {
deleteDir()
sh '/opt/fieldlight/prepare-photos --width 480'
archiveArtifacts artifacts: 'prepared/**', fingerprint: true
}
post {
always { deleteDir() }
}
}
}
}
Conserva el comando de la herramienta, los originales, el archivado y ambas llamadas de limpieza. Selecciona Save y después Build Now. Abre Console Output de la nueva ejecución y espera a Finished: SUCCESS. Debe nombrar image-studio, indicar 3 previews at 480 pixels wide y mostrar después Archiving artifacts, Recording fingerprints y el deleteDir final. Esto demuestra trabajo real en el agente capaz de realizarlo, no simplemente un mensaje renombrado.
Si ves un error de sintaxis de Groovy, vuelve a Configure, restaura el script completo anterior, guarda y realiza una nueva ejecución. Si una etiqueta mal escrita deja una ejecución en cola, cancela ese elemento en cola con su icono de cancelación, selecciona Yes en el cuadro de confirmación, corrige la etiqueta y vuelve a ejecutar. Un error al escribir el comando aparece en la consola como un comando ausente; restaura la ruta proporcionada en lugar de instalar otra herramienta. Conserva la ejecución fallida original y todo el historial posterior. Los errores habituales se pueden corregir con otro script guardado y otra ejecución; no restablezcas la máquina virtual.
Cambia a Photo Desk y actualiza la página. Selecciona Open prepared collection. Las tres vistas previas pequeñas deben mostrar los mismos motivos de jardín que los originales. Selecciona Open contact sheet para ver las tres juntas; usa Back del navegador para volver. Abre Caption table e Image details, volviendo con Back después de cada una. captions.csv es una tabla de valores separados por comas en texto sin formato: la primera fila da nombre a sus columnas y cada fila posterior describe una imagen. Relaciona cada pie de foto con su archivo de images/ y registra el ancho 480 y el alto 320; preparation.json identifica garden y el ancho 480.
Vuelve a Jenkins y abre la página de la ejecución correcta. En Build Artifacts, los enlaces a nombres de archivos PNG individuales abren las imágenes en el navegador. Para una descarga completa, selecciona el encabezado Build Artifacts y después (all files in zip) en la página del explorador de archivos. Guarda archive.zip en una carpeta para tu versión de 480 píxeles y extrae allí el ZIP completo. Sus seis archivos están en archive/prepared/, incluido el subdirectorio images/. Abre archive/prepared/images/garden-01.png y archive/prepared/contact-sheet.png en el navegador o visor de imágenes, y lee archive/prepared/captions.csv en un editor de texto. Su contenido visible debe coincidir con la colección. La vista previa de lavanda mide 480 × 320 píxeles, mientras que el original descargado sigue midiendo 1536 × 1024. Conserva el número de esta ejecución correcta y la carpeta extraída completa para el siguiente paso. Estos archivos conservados siguen disponibles después de que se haya vaciado el espacio de trabajo.

La colección preparada muestra los mismos motivos de lavanda, sendero de jardín y regadera que los originales. Usa la hoja de contactos y los enlaces a archivos para inspeccionar el resultado real conservado.
Entrega un conjunto de vistas previas más pequeñas
En este paso cumplirás una solicitud de entrega de 320 píxeles y conservarás el conjunto anterior de 480 píxeles para compararlo. Empieza en Photo Desk y vuelve a los originales con Back to originals. Confirma que los tres originales completos siguen disponibles.
El cliente necesita ahora vistas previas de exactamente 320 pixels wide (320 píxeles de ancho). El programa proporcionado acepta ese requisito mediante su opción existente --width; no editas ni sustituyes el programa de imágenes. Cambia a Jenkins, vuelve a preview-photos y selecciona Configure → Pipeline. Cambia --width 480 por --width 320 en el comando sh. El script completo debe ser ahora:
pipeline {
agent none
stages {
stage('Prepare photos') {
agent { label 'photo-imaging' }
steps {
deleteDir()
sh '/opt/fieldlight/prepare-photos --width 320'
archiveArtifacts artifacts: 'prepared/**', fingerprint: true
}
post {
always { deleteDir() }
}
}
}
}
Selecciona Save y después Build Now. Espera a que la nueva ejecución termine en SUCCESS. En Console Output, confirma que image-studio realizó el trabajo, que el programa indicó 320 pixels wide y que se realizaron el archivado y la limpieza. Si la consola sigue diciendo 480, comprueba que hayas guardado el script modificado y abierto la nueva ejecución en lugar de la anterior.
En la página de esta ejecución, selecciona Build Artifacts y después (all files in zip). Guarda y extrae por completo este nuevo archive.zip en una carpeta diferente de la de tu versión de 480 píxeles. Abre los archivos de su directorio archive/prepared/. Las tres imágenes de vista previa deben medir ahora 320 × 213 píxeles. El alto de 213 píxeles es el resultado redondeado de conservar la relación de aspecto del original de 1536 × 1024. La hoja de contactos sigue conteniendo los tres motivos en el mismo orden; es un resumen separado, no un cuarto original redimensionado. En captions.csv, el nombre de archivo, el pie de foto y las dimensiones de cada imagen deben coincidir. preparation.json debe identificar garden y el ancho 320.
Cambia a Photo Desk, actualiza la página y selecciona Open prepared collection. Inspecciona las tres vistas previas nuevas, la hoja de contactos y ambos archivos de metadatos. Vuelve a los originales y confirma que su contenido a tamaño completo no ha cambiado. Después cambia a Jenkins, abre el número de ejecución correcta anterior que anotaste y descarga de nuevo su ZIP completo mediante Build Artifacts → (all files in zip). Extráelo en otra carpeta nueva: su vista previa de lavanda debe seguir midiendo 480 × 320 píxeles. Crear una versión nueva no debe reescribir un archivo comprimido antiguo.
Si una descarga tiene un tamaño o motivo inesperado, comprueba el número de ejecución y la opción de ancho guardada, y después corrige el script y realiza una nueva ejecución. Conserva las fotografías originales, las herramientas proporcionadas, los agentes conectados, las etiquetas de capacidad y el historial completo de ejecuciones. No copies archivos entre sistemas de archivos de los agentes, no elimines la limpieza ni sustituyas un archivo comprimido por el de otra ejecución. Termina con una ejecución correcta real del script guardado. Tienes un conjunto más pequeño y utilizable, una versión anterior intacta y los originales sin cambios.
Resumen
Has relacionado una capacidad real de procesamiento de imágenes con su etiqueta de agente de Jenkins, interpretado un fallo esperado por falta de una herramienta y producido vistas previas utilizables. Cambiar la opción de ancho creó una entrega más pequeña sin modificar los originales ni el archivo comprimido anterior. Los artefactos nativos sobrevivieron al vaciado del espacio de trabajo; el siguiente laboratorio independiente utiliza dos espacios de trabajo separados y una transferencia temporal dentro de la misma ejecución.



