Введение
У FIELDNOTES есть правильный тест для посетителей, но локальный сценарий выпуска может продолжить работу после ошибки и опубликовать другой пакет. Нужно связать решение проверки с реальной доставкой.
В новой независимой среде подготовлены завершённые проверки первого занятия и неизменённый опубликованный сайт. Вы исправите короткий конвейер Bash, отклоните плохой ввод, опубликуете хороший и покажете, что последующая правка черновиков не меняет сохранённый пакет. Вкладки Workstation, Live Website и Candidate Preview готовы. Это локальный учебный конвейер, не GitHub Actions и не защитная граница промышленной системы.
Останавливать публикацию при ошибке
На этом шаге вы передадите один аргумент кандидата через проверку и публикацию. Начните в Live Website. Откройте выставку, Plan your visit и загрузку путеводителя. Текущий вход — East gate. Вернитесь на главную через FIELDNOTES.
Перейдите в Workstation. cat показывает готовый конвейер:
cat pipeline.sh
Исходный сценарий запускает проверку, а затем пытается опубликовать фиксированный packages/candidate.tar.gz. Отдельные строки команд продолжают выполняться и после ошибки предыдущей. Сам издатель дополнительно отказывает непроверенному пакету; вы должны также обеспечить ошибочный статус конвейера и передать нужный ввод в обе стадии.
Bash хранит первый аргумент в $1. candidate="$1" сохраняет его в переменной. "$candidate" раскрывает значение как один аргумент даже при пробелах в пути. && выполняет следующую команду лишь при нулевом статусе предыдущей. Ноль означает успех, другое значение — ошибку. Результат короткого сценария определяется последней выполненной командой.
Замените весь сценарий с помощью here-document из первого занятия. Последний BASH завершает буквальный блок:
cat > pipeline.sh <<'BASH'
#!/bin/bash
candidate="$1"
python3 tools.py check "$candidate" &&
python3 tools.py publish "$candidate"
BASH
#!/bin/bash указывает интерпретатор. Вы запускаете его явно через bash, поэтому менять право выполнения не требуется. Обе команды получают один и тот же аргумент пакета. Не добавляйте || true, не удаляйте проверки и не заменяйте аргумент фиксированным исправным пакетом.
Проверьте дефектного кандидата; ошибка здесь ожидаема:
bash pipeline.sh packages/wrong.tar.gz
Ожидается FAIL: Wrong visitor guide content без строки Published. Сразу проверьте статус: $? — статус предыдущей команды, echo выводит его. Выполните отдельно непосредственно после конвейера:
echo $?
Ожидается 1. Любая промежуточная команда заменит этот статус. В Live Website перезагрузите страницу и пройдите по ссылкам посещения и загрузки: исправная исходная версия остаётся доступной. Отклонённый выпуск должен оставить службу работающей.
При синтаксической ошибке Bash перечитайте сохранённый файл и восстановите показанный вариант. Сломанный сценарий не доказывает правильную блокировку выпуска. Следующий шаг покажет, что он принимает и исправный ввод.
Опубликовать проверенный пакет
На этом шаге исправный кандидат попадёт на сайт, а вы отличите сохранённые байты пакета от редактируемой рабочей копии. Начните в Workstation.
Готовый packages/candidate.tar.gz собран из drafts/ во время подготовки. Конвейер должен использовать сохранённый пакет, а не пересобирать его из последующего содержимого черновиков.
Сначала явно проверьте кандидата:
python3 tools.py check packages/candidate.tar.gz
Появятся успешный результат и идентификатор зафиксированного пакета. Теперь воспроизведите обычную правку разработчика после упаковки. > заменяет только этот текстовый файл черновика; echo печатает строку в кавычках:
echo 'UNREVIEWED DRAFT: use the West gate' > drafts/downloads/guide.txt
Убедитесь, что черновик действительно изменился:
cat drafts/downloads/guide.txt
Выводится UNREVIEWED DRAFT: use the West gate. Это намеренная правка только черновика. Не редактируйте и не пересобирайте сохранённый пакет.
Запустите исправленный конвейер с сохранённым кандидатом:
bash pipeline.sh packages/candidate.tar.gz
Ожидаются PASS: visitor checks. Frozen package ..., затем Published frozen package ... с одним идентификатором. Исполнитель проверяет зафиксированную копию и публикует ровно её байты; байты без успешной проверки отклоняются. Идентификатор — дополнительное свидетельство, а не замена проверки реального сайта.
Перейдите в Live Website, вернитесь на главную через FIELDNOTES и перезагрузите её. Откройте Explore the exhibition, Plan your visit и Download visitor guide. И страница, и загрузка указывают East gate вопреки непроверенной правке черновика. Также откройте Step-free route и Download access guide: Garden ramp сохранён. Проверьте иллюстрацию и оформление страниц.
Вернитесь в Workstation. curl отправляет HTTP-запрос; -sS скрывает прогресс, но показывает ошибки соединения. 127.0.0.1 означает эту учебную среду, а 8081 — порт опубликованного сервера. Выполняйте запросы в Workstation, не в терминале своего компьютера:
curl -sS http://127.0.0.1:8081/downloads/guide.txt
Тело начинается с FIELDNOTES Visitor Guide и содержит Entrance: East gate. Сайт использует сохранённый пакет, а не изменённый черновик. Если виден черновой текст, выясните, какой ввод публикует сценарий, и повторите исправленный конвейер с неизменённым предоставленным кандидатом.
Напоследок повторите отклонение:
bash pipeline.sh packages/missing.tar.gz
Ожидается намеренная ошибка 404 без публикации. В Live Website перезагрузите страницу и вновь скачайте путеводитель: принятый кандидат остаётся пригодным. Конвейер показал оба решения. Упражнение защищает локальный выпуск статического сайта, но не реализует контроль доступа, подписи, размещённый CI или откат миграций базы данных.
Резюме
Вы применили условное выполнение для остановки плохих выпусков, передали один пакет обеим стадиям и опубликовали точно проверенное содержимое вопреки последующей правке черновика. Обычный и доступный пути посетителей продолжают работать.


