12 KiB
Ревью автономного пакета П25 · март 2020 · «Минимальный CI/CD pipeline»
Статус: принят в publication registry 31 июля 2026 года. В нём три revision по стабильным slug; registry сохраняет метаданные базового архива:
editorial-2020-03-practice-ci-pipeline;editorial-2020-03-mechanism-ci-pipeline;editorial-2020-03-field-ci-pipeline.
Модуль не задаёт date или author, поэтому базовые
метаданные архива остаются источником истины. Материалы
описывают учебную конфигурацию GitLab CI/CD и учебную диагностику. В них нет
реальных credentials, запущенных CI job, длительностей, production-деплоя или
показателей надёжности конкретной команды.
Проход 1. Факты и техника — пройдено
| Утверждение | Первичный источник | Проверенная граница |
|---|---|---|
GitLab CI/CD задаёт последовательность job через stages и поддерживает job-level ключи artifacts, dependencies и when |
GitLab CI/CD YAML syntax reference | В примере использован консервативный линейный набор ключей; перед применением нужно сверить его с версией GitLab и Runner конкретной установки |
Job artifact — набор файлов job, а dependencies ограничивает, какие artifacts получает следующая job |
GitLab Job artifacts | В deploy явно указан только build; artifact в статьях — контракт внутри pipeline, а не вечное или криптографически защищённое хранилище |
npm ci работает с существующим lockfile и завершает установку ошибкой при конфликте package manifest и lockfile |
npm CLI v6: npm ci | Пример использует Node 12 и npm ci как эпоху 2020 года; cache не объявлен источником релизного результата |
| GitLab 12.9.0, выпущенный в марте 2020 года, содержит выбранные базовые конструкции artifacts/dependencies/manual job | GitLab 12.9.0 CI YAML reference | Никакие поздние policy-as-code, SLSA, зрелая DevOps-платформа или GitHub Actions по умолчанию в тексты не добавлены |
Технические ограничения примеров
deploy_stagingсодержит вызов вымышленного локального скрипта./scripts/deploy-staging. Он обозначает границу побочного эффекта, но не существует в этом репозитории и не запускался.REVISIONиSHA256SUMS— диагностический контракт учебного артефакта. Они не заменяют доступ к среде, секреты, подпись релиза, тестирование приложения, rollback или проверку всего supply chain.- Команда
sha256sumв тексте рассчитана на плоский GNU/Linux-совместимый каталогdist/. Для вложенного output, другого shell или другой ОС её нужно адаптировать и проверить отдельно. when: manualиallow_failure: falseвыражают намерение остановить delivery до ручного разрешения. Точное поведение и права запуска должны быть проверены небольшим пилотом на версии GitLab конкретной команды.
Вердикт прохода: пройден. Внутри статей отделены подтверждённые свойства конфигурации от того, что требуется проверить в живом окружении.
Проход 2. Редактура и голос М3 / март 2020 — пройдено
| Ревизия | Симптом и цена в начале | Главный вопрос | Практический артефакт и ограничение |
|---|---|---|---|
| Практика | Зелёный pipeline может отправить другой каталог; цена — ручной разбор и риск выложить неверный bundle | Как описать входы, собрать output один раз и остановить deploy до сети | GitLab YAML, таблица контракта и shell-проверка; нет настоящей доставки или измерений |
| Механизм | Зелёный build не отвечает, какой output проверен и отправлен; цена — невозможность повторить откат | Почему checkout, cache, artifact и deploy — четыре разных состояния | Схема gate, manifest-проверка и таблица недопустимых подмен; checksum не выдан за полную безопасность |
| Полевой разбор | Deploy пересобирает checkout после зелёного build; цена — потеря связи между проверкой и доставкой | Как расследовать нарушение происхождения artifact без retry как первого действия | Явно помеченный учебный антипример, диагностическая матрица и маршрут исправления; не real incident |
- Все три текста строятся по цепочке «симптом → причина → проверка → действие». Первые два абзаца сразу называют проблему, стоимость и границу учебного примера.
- Голос соответствует М3 / 2020: автор уверенно описывает delivery как инженерную границу между job, но не изображает владельца сложной платформенной практики или организации production-инцидентов.
- Формулировки не используют поздние подходы и не обещают универсальную автоматизацию. Cache отделён от артефакта, ручной gate — от доказательства функциональной готовности, а staging — от production.
- Каждая статья содержит figure с самостоятельным alt и подписью, table с
caption/thead, конфигурационный или shell-пример, нумерованный маршрут и четыре официальные ссылки.
Вердикт прохода: пройден. Тексты достаточно предметны для инженера, который уже обслуживает delivery, но сохраняют осторожность автора 2020 года.
Проход 3. Визуал и выпуск — пройдено в пределах автономного пакета
ci-pipeline-contract-2020.svgвертикально показывает один путь: входы → verify → единственный build → artifact → ручной deploy. В нижней части прямо отделены cache и релизный результат.ci-pipeline-gates-2020.svgраскладывает четыре независимых вопроса: lockfile, lint/test, состав output и проверка перед delivery. Красная меткаFAIL → STOPне позволяет трактовать зелёный предыдущий job как разрешение на deploy.ci-pipeline-diagnosis-2020.svgпревращает разбор в короткий вертикальный маршрут: dependency, revision, manifest, обязательный файл, затем manual gate.- У всех SVG есть
title,desc,role="img"иaria-labelledby. В них нет script,foreignObject, внешних URL и растровых data URI. - Независимый raster preflight отрендерил каждый SVG через Sharp в PNG шириной 375 px. Проверены короткие строки, крупные заголовки, отсутствие обрезания, наложения и горизонтального выхода. Это проверка статичных схем, не browser-review опубликованной страницы.
- Основной редактор повторно просмотрел три финальных raster-версии на 375 px и подтвердил вывод. После подключения registry strict audit и production build пройдены; они не подменяют запуск GitLab job или delivery-script.
Фактические проверки
Запущены после финальных правок 31 июля 2026 года:
node --check web/scripts/upgrade-2020-03.mjs
cd web && npm run audit:draft -- scripts/upgrade-2020-03.mjs
xmllint --noout \
web/public/assets/editorial/2020/ci-pipeline-contract-2020.svg \
web/public/assets/editorial/2020/ci-pipeline-gates-2020.svg \
web/public/assets/editorial/2020/ci-pipeline-diagnosis-2020.svg
| Проверка | Результат |
|---|---|
node --check |
PASS, code 0 |
| Draft gate | PASS: 8 828 / 8 888 / 8 037 знаков основного текста; у каждой статьи есть проблема в начале, figure, table, code, маршрут и источники |
xmllint --noout |
PASS, все три SVG — корректный XML |
| Source reachability | PASS, четыре официальные ссылки вернули HTTP 200 после допустимых redirect, где он есть |
| Sharp preflight 375 px | PASS, три вертикальных SVG читабельны, без обрезания и наложения |
| Strict audit после подключения registry | PASS: 8 828 / 8 888 / 8 037 знаков; по одному figure и table, 2 / 1 / 2 code example |
npm run build |
PASS, code 0, 374 статические страницы |
| Scope/self-review | PASS: в revision нет date/author, articles.json не перезаписан; посторонние незакоммиченные материалы не добавлялись в индекс |
Выпусковой вердикт: тройное ревью пройдено, пакет принят к публикации. Registry заменяет только редакционные поля по стабильному slug. Реальный GitLab job, браузерная страница и внешняя доставка не выполнялись и не выданы за результат статических проверок.