Mantén publicado el aviso más reciente

JenkinsBeginner
Practicar Ahora

Introducción

Pine & Path está preparando un paseo por el jardín. Un editor solicita retrasar el inicio; después, otro cambia el punto de encuentro. Jenkins puede preparar y publicar cualquiera de los avisos, pero una ejecución anterior que espera aprobación podría sobrescribir el anuncio más reciente después de que este ya haya llegado a los visitantes.

Verás cómo se produce esa sobrescritura y después cambiarás el Pipeline para que una nueva ejecución sustituya automáticamente a una anterior que está esperando. Tu resultado es un aviso real para visitantes y un paquete descargable de siete archivos, cuya ruta, horario y notas coinciden con la solicitud más reciente.

Los requisitos previos son la navegación básica por las páginas de Jenkins y el reconocimiento de un Pipeline declarativo breve. Aquí se explican los parámetros, las pausas de aprobación y el ajuste de concurrencia. Jenkins, dos ejecutores del controlador, las herramientas de avisos y el Notice Desk local están preparados. No instalarás software ni escribirás el sitio web. Ambas interfaces se ejecutan en una única máquina virtual de prácticas; este es un publicador local controlado, no una plataforma de despliegue de producción. La duración es una estimación del autor, no un tiempo medido con principiantes.

Observa cómo una aprobación tardía sobrescribe un aviso

En este paso publicarás el aviso más reciente y después observarás cómo lo sobrescribe una ejecución anterior que estaba esperando. Empieza en Notice Desk. Mantén abierta esta interfaz; cambiar de interfaz no reinicia una ejecución ni restablece el aviso.

Inspecciona la experiencia normal del visitante

El primer evento es el paseo por el jardín. Selecciona su enlace View notice. El aviso proporcionado comienza a las 10:00 en Community Gate. Abre Open the route e inspecciona las tres paradas. Usa la acción Back del navegador para volver al aviso. Abre Read visitor notes, lee las instrucciones de encuentro y usa Back de nuevo. Schedule table es un archivo CSV: una tabla sencilla cuyos campos están separados por comas. Notice details es JSON: valores con etiquetas que describen el mismo evento. Preparation record identifica cómo se preparó este paquete. En este punto indica de forma veraz PROVIDED BASELINE; la preparación del entorno no ha ejecutado el trabajo de Jenkins por ti.

Usa la acción Back del navegador para volver a la página de inicio de Notice Desk. Selecciona Download notice pack para el paseo por el jardín y guarda el archivo ZIP. Un ZIP mantiene varios archivos juntos. Extrae el archivo comprimido completo en una carpeta nueva con la herramienta de archivos comprimidos de tu ordenador y abre su index.html. Mantén los siete archivos vecinos juntos. La ruta, la hoja de estilos, el horario, las notas, el JSON y el registro de preparación son archivos locales reales; mover solo index.html romperá sus enlaces a los archivos vecinos. El navegador puede abrir un archivo CSV o de texto o descargarlo; ambos comportamientos son adecuados para leer los bytes guardados.

Vuelve a la página de inicio de Notice Desk. Inspecciona el aviso independiente Seed Swap y su descarga. Comienza a las 11:00 en Potting Shed y debe permanecer sin cambios. Las próximas solicitudes de los editores afectan únicamente al paseo por el jardín.

Selecciona Read the editor requests. La solicitud anterior utiliza el valor de UPDATE later-start: 10:30, todavía en Community Gate. La solicitud más reciente es new-meeting-point: mantener las 10:30 y reunirse en Glasshouse Gate. Aquí «más reciente» significa la solicitud posterior del editor, no la ejecución que termine en último lugar.

Lee el Pipeline preparado

Cambia a Jenkins. Abre publish-walk-notice y después Configure. Busca la sección Pipeline y su editor Script. Este es un Pipeline declarativo: el bloque exterior pipeline { ... } describe el trabajo y las llaves emparejadas agrupan sus ajustes y etapas.

El trabajo utiliza agent any, que asigna un ejecutor y un espacio de trabajo en un nodo preparado disponible. Un ejecutor es una plaza de Jenkins para realizar trabajo; un espacio de trabajo es el directorio de trabajo de una ejecución. Este controlador de prácticas tiene dos ejecutores, por lo que pueden solaparse dos ejecuciones de este trabajo. Tienen directorios de trabajo separados, pero publican en el mismo aviso del jardín.

El bloque parameters define los valores elegidos para cada ejecución. choice ofrece las dos solicitudes de los editores como UPDATE. booleanParam convierte HOLD_FOR_REVIEW en una casilla: marcada significa true y desmarcada significa false. params.HOLD_FOR_REVIEW lee el valor elegido para esa ejecución. Una condición when ejecuta su etapa solo cuando la expresión es verdadera.

Las tres etapas tienen propósitos distintos:

  • Prepare notice vacía el espacio de trabajo de la ejecución con deleteDir(), llama al programa de preparación proporcionado con sh y archiva notice-pack.zip. archiveArtifacts conserva ese archivo exacto con la ejecución nativa. fingerprint: true registra su identidad de contenido y la ejecución asociada. Preparar y archivar no cambian el aviso para visitantes.
  • Review notice utiliza input para pausar una ejecución con la casilla marcada antes de publicar. Su enlace Proceed permite continuar a la siguiente etapa; Abort cancela esa ejecución. Esta es una pausa intencionada, no un fallo de conexión.
  • Publish notice envía el paquete preparado al Notice Desk local. El bloque post { always { ... } } vacía el espacio de trabajo cuando termina la ejecución, incluso si se interrumpe. Los archivos nativos archivados siguen disponibles después de la limpieza del espacio de trabajo.

Los programas proporcionados de preparación y publicación leen los parámetros y el archivo comprimido de la ejecución real. Conserva estos programas, todas las etapas, la condición de revisión, el registro de huellas digitales y ambas operaciones de limpieza. En el siguiente paso cambiarás únicamente cómo se gestionan las ejecuciones solapadas. Por ahora, deja el Script sin cambios. Selecciona Save para volver al trabajo.

Inicia una ejecución anterior y déjala esperando

En la página del trabajo publish-walk-notice, selecciona Build with Parameters. Selecciona later-start en UPDATE y marca HOLD_FOR_REVIEW haciendo clic en su etiqueta o casilla. Selecciona Build una vez.

Abre la ejecución recién iniciada en Build History; en un trabajo sin modificar es la #1. Abre Console Output. Espera a Release this selected notice? con los enlaces Proceed y Abort. Déjala esperando. La consola ya ha informado de la preparación y el archivado. El aviso compartido del trabajo para visitantes sigue siendo el inicial porque Publish notice no se ha ejecutado.

Usa el enlace publish-walk-notice de la ruta de navegación de la parte superior para volver a la página del trabajo. Esto navega dentro de Jenkins; es diferente de cambiar a la interfaz Notice Desk. Anota el número de la ejecución anterior para poder volver a su consola en espera.

Selecciona Build with Parameters de nuevo. Esta vez selecciona new-meeting-point y deja HOLD_FOR_REVIEW desmarcada. Selecciona Build una vez. Abre Console Output de esta nueva ejecución y espera a Finished: SUCCESS. En un trabajo sin modificar es la #2.

Cambia a Notice Desk y recarga su página de inicio. Abre el aviso del jardín: ahora deben aparecer 10:30 y Glasshouse Gate. Abre su ruta y las notas para visitantes y confirma el mismo punto de encuentro. La solicitud más reciente del editor está realmente publicada.

Continúa la ejecución anterior

Vuelve a Jenkins. Vuelve al trabajo, abre la ejecución anterior que anotaste y su Console Output, y selecciona su enlace Proceed. Espera a Finished: SUCCESS. Si tienes abierta una consola desactualizada, recarga la consola de esa ejecución antes de seleccionar el enlace; no inicies otra ejecución solo para actualizar una página.

Cambia a Notice Desk, recarga e inspecciona de nuevo el aviso del jardín. Ahora indica 10:30 en Community Gate. Este es el fallo esperado: la ejecución anterior terminó más tarde y sobrescribió la solicitud más reciente. Ambas ejecuciones de Jenkins terminaron correctamente, pero el resultado de negocio quedó desactualizado.

Descarga este paquete actual en una carpeta diferente. Su publication.txt nombra la ejecución anterior de Jenkins; su ruta, horario y notas coinciden con esa solicitud anterior. Vuelve a Jenkins y abre el enlace Build Artifacts de esa ejecución anterior para descargar su notice-pack.zip nativo. Notice Desk entregó ese archivo comprimido realmente preparado, en lugar de generar silenciosamente otro aviso.

Si una ejecución está esperando de forma inesperada, inspecciona sus Parameters elegidos y su consola. Puedes seleccionar Abort en su solicitud de entrada para cancelar una ejecución que espera por error y después iniciar de nuevo los parámetros previstos. Conserva todo el historial de ejecuciones. Un mensaje de fallo antes de la solicitud de entrada es diferente de la pausa de aprobación esperada; lee su consola y vuelve a Configure para restaurar las etapas proporcionadas si las editaste accidentalmente.

Autocomprobación: has conservado ambas ejecuciones correctas reales, la aprobación real de la ejecución anterior y el resultado desactualizado para los visitantes. El aviso independiente de Seed Swap y su descarga siguen funcionando. Las correcciones posteriores no borrarán esta evidencia.

Permite que las nuevas ejecuciones sustituyan a las anteriores en espera

En este paso impedirás que una aprobación antigua sobrescriba la solicitud más reciente. Empieza en Jenkins, en la página del trabajo publish-walk-notice.

Añade la política de solapamiento del mismo trabajo

El bloque options de un Pipeline controla el comportamiento de las ejecuciones. disableConcurrentBuilds() por sí solo hace que las nuevas ejecuciones esperen en una cola hasta que termine la ejecución actual. Eso dejaría la aprobación anterior al mando. En cambio, el ajuste abortPrevious: true interrumpe una ejecución anterior cuando comienza una más reciente de este mismo trabajo. true es un valor booleano, no texto entre comillas. Los dos puntos pasan esta opción con nombre al ajuste.

Selecciona Configure, busca Pipeline → Script e inserta la siguiente línea directamente después de agent any, dentro del bloque exterior pipeline y antes de parameters:

    options { disableConcurrentBuilds(abortPrevious: true) }

El principio debe ser ahora:

pipeline {
    agent any
    options { disableConcurrentBuilds(abortPrevious: true) }
    parameters {

Este pequeño fragmento muestra la ubicación; no sustituyas todo el Script por el fragmento. Conserva los parámetros, etapas, archivado y limpieza existentes. Selecciona Save. Guardar cambia las ejecuciones futuras; debes ejecutar una nueva pareja para demostrar su efecto.

Observa la sustitución automática

En la página del trabajo, selecciona Build with Parameters, selecciona later-start, marca HOLD_FOR_REVIEW y selecciona Build. Abre Console Output de la nueva ejecución anterior y espera a la solicitud real Proceed / Abort. En un recorrido sin modificaciones es la #3. Déjala esperando; no la canceles ni continúes manualmente.

Vuelve al trabajo mediante su ruta de navegación. Selecciona Build with Parameters, selecciona new-meeting-point, deja HOLD_FOR_REVIEW desmarcada y selecciona Build. Abre la consola de esta ejecución más reciente y espera a Finished: SUCCESS. En un recorrido sin modificaciones es la #4.

Abre la consola de la ejecución anterior en espera y recárgala. En la versión de Jenkins preparada, la ejecución queda en NOT_BUILT, con Superseded by #... indicando la ejecución más reciente. La antigua etapa Publish notice se omitió y la limpieza se realizó igualmente. Un estado gris por sí solo no basta: lee la causa de sustitución y compara el número de ejecución más reciente. La entrada antigua ya no espera tu aprobación. La consola histórica puede seguir mostrando su texto anterior Proceed/Abort; no uses esos enlaces antiguos después de la sustitución.

La ejecución anterior fue sustituida por su ejecución más reciente

Lee Superseded by #... y la etapa de publicación omitida, y compara después el resultado final NOT_BUILT.

NOT_BUILT aquí no significa que no se haya realizado ningún trabajo. La ejecución anterior preparó y archivó su paquete antes de la pausa. Abre su Build Artifacts y confirma que notice-pack.zip sigue siendo descargable. Lo que la política impidió fue la publicación posterior de ese paquete desactualizado. La limpieza de los espacios de trabajo de ambas ejecuciones deja intactos estos archivos archivados.

Cambia a Notice Desk, recarga y abre el aviso del jardín. Debe mostrar 10:30 en Glasshouse Gate. Lee la ruta, las notas y el horario.

El aviso más reciente del jardín y su ruta coincidente

Comprueba conjuntamente 10:30, Glasshouse Gate y la primera parada de la ruta. Vuelve a la página de inicio y verifica que Seed Swap sigue comenzando a las 11:00 en Potting Shed.

Practica la cancelación de una pausa de aprobación accidental

Cambia a Jenkins. Inicia otra ejecución de later-start con HOLD_FOR_REVIEW marcada. Espera a la solicitud de entrada de su consola y selecciona Abort. Esta es una cancelación manual deliberada, que termina en ABORTED. Es diferente de la sustitución automática que ya has observado y no reemplaza esa evidencia. El aviso publicado permanece en Glasshouse Gate porque esta ejecución nunca publicó.

Inicia una ejecución final de new-meeting-point con HOLD_FOR_REVIEW desmarcada y espera a SUCCESS. Esta es la acción de recuperación si pausas o cancelas accidentalmente la solicitud equivocada: inspecciona la página del editor, selecciona la solicitud más reciente y ejecútala sin pausa. Conserva las ejecuciones anteriores; eliminar el historial quitaría evidencia del comportamiento de la política.

Si guardar un Script produce FAILURE con un mensaje de sintaxis, comprueba el emparejamiento de llaves y asegúrate de que la línea options esté dentro de pipeline, no dentro de stages ni de los steps de una etapa. Corrígelo en Configure, guarda e inicia de nuevo la pareja prevista. No restablezcas la máquina virtual ni modifiques las herramientas proporcionadas. Los intentos fallidos adicionales pueden permanecer en el historial.

Conserva e inspecciona la entrega final

Cambia a Notice Desk. Recarga y descarga después el notice pack del jardín. Guárdalo en una carpeta nueva en lugar de mezclar archivos de descargas anteriores. Extrae el ZIP completo y abre index.html. Confirma Glasshouse Gate, 10:30, la ruta ilustrada y las tres paradas. Abre Read visitor notes, Schedule table, Notice details y Preparation record. El CSV y el JSON deben coincidir con la página; publication.txt nombra el trabajo y la ejecución finales correctos de Jenkins. La carpeta completa funciona localmente sin Jenkins ni Notice Desk. Usa la acción Back del navegador entre las vistas de archivos locales.

En Jenkins, abre la ejecución correcta correspondiente y Build Artifacts, y descarga notice-pack.zip. Sus siete archivos extraídos deben coincidir con la descarga de Notice Desk. Los archivos nativos archivados de Jenkins documentan lo que preparó una ejecución; Notice Desk muestra lo que se publicó realmente.

Autocomprobación: la política guardada está activa, una ejecución más reciente real sustituyó automáticamente a una anterior pausada en la entrada y los visitantes reciben los archivos reales de la solicitud más reciente. La pareja de ejecución pausada y ejecución más reciente debe haber ejecutado este Script guardado. Tu ejecución completada más reciente debe ser por sí misma una publicación correcta de la solicitud más reciente; después de una publicación errónea u omitida, restaura el Script y vuelve a ejecutar. Si vuelves a cambiar su comportamiento, demuestra una nueva pareja de ejecución pausada y ejecución más reciente. Todo el historial de ejecuciones, los archivos comprimidos anteriores, el comportamiento de preparación, revisión, publicación y limpieza y el evento independiente permanecen intactos.

Este ajuste afecta al solapamiento en un trabajo. No puede deshacer una publicación que haya ocurrido antes de la interrupción, coordinar trabajos diferentes ni hacer que cualquier despliegue de producción se pueda cancelar de forma segura. Aquí la ejecución anterior se pausa antes de su único paso de publicación, lo que deja claro el límite.

Resumen

Has relacionado un resultado real para visitantes con el comportamiento de las ejecuciones de Jenkins. Has reproducido cómo una aprobación anterior sobrescribía un aviso más reciente y después has utilizado disableConcurrentBuilds(abortPrevious: true) para que las nuevas ejecuciones interrumpan las anteriores en espera del mismo trabajo. Has distinguido la preparación de la publicación, la sustitución nativa de la cancelación manual y los archivos archivados de los archivos del espacio de trabajo.

Tu producto final es el aviso más reciente del jardín con una ruta, un horario y unas notas sin conexión coincidentes. El historial conservado muestra por qué su ejecución correcta significa que la actualización prevista llegó realmente a los visitantes.