Files
huncode cf5472d22f
Build and deploy / deploy (push) Successful in 13s
revise March 2020 pipeline articles
2026-07-31 11:17:19 +03:00

117 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ревью автономного пакета П25 · март 2020 · «Минимальный CI/CD pipeline»
Статус: **принят в publication registry 31 июля 2026 года**. В нём три
revision по стабильным slug; registry сохраняет метаданные базового архива:
- <code>editorial-2020-03-practice-ci-pipeline</code>;
- <code>editorial-2020-03-mechanism-ci-pipeline</code>;
- <code>editorial-2020-03-field-ci-pipeline</code>.
Модуль не задаёт <code>date</code> или <code>author</code>, поэтому базовые
метаданные архива остаются источником истины. Материалы
описывают учебную конфигурацию GitLab CI/CD и учебную диагностику. В них нет
реальных credentials, запущенных CI job, длительностей, production-деплоя или
показателей надёжности конкретной команды.
## Проход 1. Факты и техника — пройдено
| Утверждение | Первичный источник | Проверенная граница |
| --- | --- | --- |
| GitLab CI/CD задаёт последовательность job через <code>stages</code> и поддерживает job-level ключи <code>artifacts</code>, <code>dependencies</code> и <code>when</code> | [GitLab CI/CD YAML syntax reference](https://docs.gitlab.com/ee/ci/yaml/) | В примере использован консервативный линейный набор ключей; перед применением нужно сверить его с версией GitLab и Runner конкретной установки |
| Job artifact — набор файлов job, а <code>dependencies</code> ограничивает, какие artifacts получает следующая job | [GitLab Job artifacts](https://docs.gitlab.com/ci/jobs/job_artifacts/) | В deploy явно указан только <code>build</code>; artifact в статьях — контракт внутри pipeline, а не вечное или криптографически защищённое хранилище |
| <code>npm ci</code> работает с существующим lockfile и завершает установку ошибкой при конфликте package manifest и lockfile | [npm CLI v6: npm ci](https://docs.npmjs.com/cli/v6/commands/npm-ci/) | Пример использует Node 12 и <code>npm ci</code> как эпоху 2020 года; cache не объявлен источником релизного результата |
| GitLab 12.9.0, выпущенный в марте 2020 года, содержит выбранные базовые конструкции artifacts/dependencies/manual job | [GitLab 12.9.0 CI YAML reference](https://gitlab.com/gitlab-org/gitlab/-/blob/v12.9.0-ee/doc/ci/yaml/README.md) | Никакие поздние policy-as-code, SLSA, зрелая DevOps-платформа или GitHub Actions по умолчанию в тексты не добавлены |
### Технические ограничения примеров
- <code>deploy_staging</code> содержит вызов вымышленного локального скрипта
<code>./scripts/deploy-staging</code>. Он обозначает границу побочного
эффекта, но не существует в этом репозитории и не запускался.
- <code>REVISION</code> и <code>SHA256SUMS</code> — диагностический контракт
учебного артефакта. Они не заменяют доступ к среде, секреты, подпись релиза,
тестирование приложения, rollback или проверку всего supply chain.
- Команда <code>sha256sum</code> в тексте рассчитана на плоский
GNU/Linux-совместимый каталог <code>dist/</code>. Для вложенного output,
другого shell или другой ОС её нужно адаптировать и проверить отдельно.
- <code>when: manual</code> и <code>allow_failure: false</code> выражают
намерение остановить 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 с
<code>caption</code>/<code>thead</code>, конфигурационный или shell-пример,
нумерованный маршрут и четыре официальные ссылки.
Вердикт прохода: **пройден**. Тексты достаточно предметны для инженера,
который уже обслуживает delivery, но сохраняют осторожность автора 2020 года.
## Проход 3. Визуал и выпуск — пройдено в пределах автономного пакета
- <code>ci-pipeline-contract-2020.svg</code> вертикально показывает один
путь: входы → verify → единственный build → artifact → ручной deploy. В
нижней части прямо отделены cache и релизный результат.
- <code>ci-pipeline-gates-2020.svg</code> раскладывает четыре независимых
вопроса: lockfile, lint/test, состав output и проверка перед delivery.
Красная метка <code>FAIL → STOP</code> не позволяет трактовать зелёный
предыдущий job как разрешение на deploy.
- <code>ci-pipeline-diagnosis-2020.svg</code> превращает разбор в короткий
вертикальный маршрут: dependency, revision, manifest, обязательный файл,
затем manual gate.
- У всех SVG есть <code>title</code>, <code>desc</code>,
<code>role="img"</code> и <code>aria-labelledby</code>. В них нет script,
<code>foreignObject</code>, внешних 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 года:
<pre><code>node --check web/scripts/upgrade-2020-03.mjs
cd web &amp;&amp; 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</code></pre>
| Проверка | Результат |
| --- | --- |
| <code>node --check</code> | PASS, code 0 |
| Draft gate | PASS: 8 828 / 8 888 / 8 037 знаков основного текста; у каждой статьи есть проблема в начале, figure, table, code, маршрут и источники |
| <code>xmllint --noout</code> | 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 |
| <code>npm run build</code> | PASS, code 0, 374 статические страницы |
| Scope/self-review | PASS: в revision нет date/author, <code>articles.json</code> не перезаписан; посторонние незакоммиченные материалы не добавлялись в индекс |
Выпусковой вердикт: **тройное ревью пройдено, пакет принят к публикации**.
Registry заменяет только редакционные поля по стабильному slug. Реальный
GitLab job, браузерная страница и внешняя доставка не выполнялись и не выданы
за результат статических проверок.