Введение
Walk Weekender подтвердил версию комплекта для посетителей Riverwalk Saturday. Более поздний черновик также успешно собран. Задание доставки должно получить подтверждённый комплект из уже существующего запуска Jenkins, не пересобирая его и не полагаясь на очищенный рабочий каталог.
Для этой лабораторной работы предполагается знание архивирования, очистки рабочего каталога и отпечатков файлов из Сохраните комплект мероприятия для скачивания, а также базовые навыки навигации в Jenkins и распаковки ZIP. Этот модуль начинается независимо: история исходных сборок, предыдущий текущий комплект и задание доставки уже подготовлены. Файлы или работающая виртуальная машина из предыдущей лабораторной работы не нужны.
Используйте Pack Desk для изучения реальных файлов для посетителей и Jenkins для изучения и настройки заданий. Это два сервиса в одной подготовленной виртуальной машине. Плагин Copy Artifact уже доступен. Предоставленное средство публикации — небольшой локальный учебный получатель, проверяющий этот запрос; это не промышленный реестр артефактов и не сервис согласования. Вы выберете уже подтверждённый запуск, а не будете реализовывать процесс согласования. Продолжительность — авторская оценка, а не измеренное время для начинающих.
Сравните запрос со скопированным комплектом
На этом шаге вы определите подтверждённый исходный запуск, а затем увидите, как задание доставки копирует другую версию. Начните в Pack Desk.
Прочитайте Requested edition: RW-02. Мероприятие — Riverwalk Saturday, исходное задание — create-riverwalk-pack. Выберите Open the current pack. Текущая версия — RW-01, время встречи — 10:30. Запрошенный комплект должен заменить эту предыдущую версию, при этом отдельный комплект Parkside должен остаться доступным. Вернитесь к Pack Desk действием браузера Back.
Переключитесь в Jenkins, откройте create-riverwalk-pack и изучите его сборки с номерами в разделе Builds. Номера сборок относятся к одному заданию; сам по себе номер не является глобальным идентификатором артефакта. Откройте Console Output каждой сборки, чтобы прочитать подготовленную версию для посетителей и окончательный результат. В истории есть:
| Сборка | Версия для посетителей | Результат | Значение для этого запроса |
|---|---|---|---|
| #1 | Parkside Paper Trail / PP-01 | SUCCESS | Другое мероприятие |
| #2 | Riverwalk Saturday / RW-02 | SUCCESS | Существующий подтверждённый комплект |
| #3 | Riverwalk Saturday / RW-03-DRAFT | SUCCESS | Более новый черновик, не соответствующий запросу |
| #4 | Riverwalk Saturday / RW-02 | FAILURE | Неуспешный запуск, хотя он сохранил ZIP |
Откройте сборку #2 по ссылке в навигационной цепочке, скачайте event-pack.zip из Build Artifacts и распакуйте архив полностью. В обзоре и памятке указаны RW-02 и 10:00. Консольный вывод заканчивается очисткой рабочего каталога. Архив принадлежит сборке, поэтому задание доставки может получить его и после этой очистки.
Сохраните существующую историю исходных сборок. Не настраивайте, не перезапускайте, не удаляйте и не переименовывайте исходные задания или их сборки. В область изменений входят только Pipeline deliver-riverwalk-pack и параметры его сборок. Сохраните предоставленные файлы, средство публикации, архивирование и очистку, а отдельный комплект Parkside оставьте нетронутым.
Перейдите по Dashboard в навигационной цепочке, откройте deliver-riverwalk-pack, затем выберите Configure и раздел Pipeline. Прочитайте этап Copy archive, пока ничего не меняя:
copyArtifacts projectName: params.SOURCE_JOB,
selector: lastSuccessful(),
filter: 'event-pack.zip',
fingerprintArtifacts: true
copyArtifacts получает сохранённые артефакты другого задания Jenkins. projectName выбирает это задание; params.SOURCE_JOB читает значение, введённое для данного запуска доставки. filter выбирает файлы в его архиве. Селектор определяет, какой исходный запуск с номером использовать. lastSuccessful() — меняющийся выбор: он означает последний успешный запуск на момент копирования, а не версию из вашего запроса. fingerprintArtifacts: true регистрирует использование файла для отслеживания между заданиями.
Предоставленный этап Archive delivery сохраняет скопированный ZIP в сборке доставки. Deliver pack отправляет в локальный Pack Desk именно эти скопированные байты. Заключительная очистка post очищает рабочий каталог доставки. Оставьте эти части без изменений. Выберите Save без редактирования.
Выберите Build with Parameters. Дождитесь полной загрузки формы. Установите SOURCE_JOB в create-riverwalk-pack, а SOURCE_BUILD в 2, затем выберите Build. Эти значения описывают предполагаемый источник; текущий селектор по-прежнему игнорирует SOURCE_BUILD.
Дождитесь завершения этой сборки доставки со статусом FAILURE, затем откройте Console Output. Ожидается Copied 1 artifact из исходной сборки 3, а затем The package bytes differ from the selected source archive. Средство публикации возвращает HTTP 422: соединение с сервисом установлено, но он отклонил выбранный пакет. Это отличается от сбоя соединения. Шаг оболочки возвращает ненулевой результат, поэтому сборка завершается неуспешно.
Откройте event-pack.zip этой сборки доставки в разделе Build Artifacts, распакуйте его в отдельную папку и прочитайте обзор. В нём содержится RW-03-DRAFT, потому что сборка #3 — последний успешный исходный запуск. Наличия сохранённого ZIP и успешного исходного запуска недостаточно, чтобы определить запрошенную версию.
Переключитесь в Pack Desk, обновите страницу и снова откройте текущий комплект. В нём по-прежнему должны быть RW-01 и 10:30. Отклонённая попытка не должна заменять корректные материалы для посетителей. Вернитесь к Pack Desk действием браузера Back.
Доставьте и отследите подтверждённый запуск
На этом шаге вы скопируете явно указанный подтверждённый запуск и проверите доставленные файлы для посетителей и их след в Jenkins. Начните со страницы задания deliver-riverwalk-pack в Jenkins.
Выберите Configure, затем Pipeline. В Script замените только:
selector: lastSuccessful(),
на:
selector: specific(params.SOURCE_BUILD),
specific(...) выбирает явно указанный номер исходной сборки. params.SOURCE_BUILD читает строку, введённую в форме сборки; вместе с SOURCE_JOB она определяет один существующий запуск. Сохраните запятую: следующая настройка filter относится к той же операции copyArtifacts. Сохраните предоставленное значение RECEIVER_URL, все остальные этапы и заключительную очистку.
В Script найдите строку селектора под Copy archive. Дождитесь полной загрузки кода и при необходимости прокрутите содержимое редактора. Дважды щёлкните lastSuccessful, чтобы выделить только это имя функции, затем введите specific. Пустые круглые скобки останутся. Когда курсор находится сразу после specific, один раз нажмите клавишу Right Arrow, чтобы перейти внутрь (), затем введите params.SOURCE_BUILD. Перед сохранением сравните полную строку селектора с приведённой выше. Если случайно заменили больше текста, до сохранения используйте Ctrl+Z в Windows/Linux или Command+Z в macOS и попробуйте снова. Выберите Save.
Снова запустите Build with Parameters. Дождитесь полной загрузки формы, введите create-riverwalk-pack в SOURCE_JOB и 2 в SOURCE_BUILD, затем выберите Build. Дождитесь SUCCESS. В консоли должны отображаться скопированный артефакт, действия архивирования и регистрации отпечатка, ответ, содержащий delivered, и заключительная очистка рабочего каталога.
Если Jenkins сообщает о синтаксической ошибке Groovy, вернитесь в Configure и сравните строку селектора, круглые скобки и запятую с точной заменой выше. Сохраните и запустите снова с теми же значениями. Если консоль сообщает об отсутствующем проекте, сборке или артефакте, проверьте оба значения в форме и исходную сборку #2. Не перезапускайте исходное задание, чтобы создать новый запуск. Ответ The selected source run does not satisfy this delivery request. означает, что задание или номер сборки указаны неверно. The package bytes differ from the selected source archive. означает, что скопированный ZIP не совпадает с исходным запуском, указанным этими параметрами. Оба ответа — отказы по правилам обработки запроса после успешного обращения к Pack Desk.
Откройте страницу статуса успешной сборки доставки и выберите See Fingerprints. В Recorded Fingerprints поле Original owner строки event-pack.zip должно вести к сборке #2 задания create-riverwalk-pack. Выберите ссылку event-pack.zip, чтобы открыть подробности. Ссылка на сборку, в которой появился файл, должна указывать на этот исходный запуск, а Usage должен включать ваш успешный запуск deliver-riverwalk-pack. Это записи Jenkins о происхождении и использовании одного и того же файла. Они не подтверждают, кто согласовал версию, и не предоставляют криптографическую подпись издателя.

Изучите ссылку на сборку, в которой появился файл, вверху страницы и два задания под Usage. Номер вашей сборки доставки может отличаться от этого примера.
Скачайте event-pack.zip из этой успешной сборки доставки. Распакуйте его в новую папку, откройте index.html и убедитесь, что указаны Riverwalk Saturday, RW-02 и 10:00. Откройте Explore the route и проверьте все три остановки и отображение изображения маршрута. Выберите Download all route stops для CSV и Read the visitor notes для локального текста. Памятка может открыться прямо в браузере вместо повторного скачивания; исходный текстовый файл уже находится в распакованной папке. Держите все восемь файлов вместе, включая build.json, в котором job и number указывают на create-riverwalk-pack и 2.
Переключитесь в Pack Desk и обновите страницу. Теперь в текущем комплекте должна быть указана RW-02. Откройте его и повторите проверки маршрута, CSV и памятки. Вернитесь действием браузера Back, затем выберите Download the current ZIP. Скачанный файл должен быть полным исходным архивом сборки, а не заново собранной заменой. Перед сменой текущего комплекта получатель сравнивает фактические байты.
Наконец, выберите Parkside pack в навигации Pack Desk и убедитесь, что Parkside Paper Trail по-прежнему открывается с маршрутом и памяткой. История исходных сборок и все предоставленные файлы должны остаться нетронутыми. После любого дальнейшего изменения Pipeline снова запустите сохранённый Pipeline, прежде чем проверять завершение.
Резюме
Вы получили подтверждённый комплект для посетителей из существующей сборки Jenkins после очистки её рабочего каталога. Вы увидели, почему меняющийся селектор может выбрать успешный черновик, явно указали задание и номер сборки и проследили исходный архив через отпечатки Jenkins до отдельного задания доставки. Теперь Pack Desk предоставляет полные исходные файлы для посетителей, а отдельное мероприятие остаётся доступным.



