Главная мысль
Создайте быструю и понятную проверку каждого изменения, храните правила выпуска в коде и защищайте учётные данные конвейера так же тщательно, как данные доступа к рабочей среде.
Различайте интеграцию, подготовку к выпуску и автоматическое развёртывание
Непрерывная интеграция (CI) предполагает частое объединение изменений в общем репозитории и автоматические сборки и тесты. Непрерывная поставка (Continuous Delivery) поддерживает проверенный артефакт готовым к выпуску в тестовую или рабочую среду. Непрерывное развёртывание (Continuous Deployment) автоматически выпускает изменения после прохождения заданных проверок. Зафиксируйте, что команда называет «CD». Передавайте между этапами один и тот же проверенный артефакт, чтобы избежать различий при повторной сборке.
| Этап | Основная задача | Результат |
|---|---|---|
| CI | Сборка, модульные, интеграционные и защитные проверки | Проверенный артефакт и быстрая обратная связь |
| Continuous Delivery | Подготовка артефакта к выпуску в среды | Решение о подтверждении или выпуске |
| Continuous Deployment | Автоматический выпуск прошедших проверку изменений | Автоматический выпуск в рабочую среду |
Включите безопасность в ранние проверки
Небольшие изменения ускоряют сборку, тесты и анализ кода. Добавьте к модульным и интеграционным тестам SAST, проверку зависимостей (SCA), поиск секретов и сканирование конфигурации IaC и контейнеров на подходящих этапах конвейера. Автоматизируйте проверки разрешений, схем, чувствительных операций и ошибок. Отдельно планируйте DAST и тесты на проникновение в работающих средах: сканирование изменений кода не охватывает всё поведение приложения и реальные сценарии. Передавайте разработчикам выявленные проблемы с понятным объяснением и контекстом кода.
Изменение кода и сборка
Проверьте сборку кода и статические правила.
Тесты и сканирование
Проверьте рабочие сценарии, код, зависимости, секреты и IaC.
Артефакт и выпуск
Подпишите артефакт, сохраните сведения о его происхождении и результатах тестов, затем передавайте его по этапам выпуска.
Политики как код делают проверки воспроизводимыми
Определяйте политики в текстовых файлах, пригодных для автоматической проверки, храните историю в системе контроля версий и рассматривайте изменения в запросах на слияние. Правила могут требовать минимальных прав учётных записей, запрещать публичное хранилище, задавать разрешённые базовые образы, обязательные результаты тестов и условия перехода в рабочую среду. Механизм применения политик может остановить слияние или развёртывание при нарушении. Для исключений укажите причину, область действия, ответственного и дату окончания; проверяйте тестами и сами политики при их изменении.
Код и зависимости
Правила проверяют лицензии, уязвимости и секреты.
Инфраструктура как код
Проверяет настройки сети, учётных записей, хранилищ и шифрования до развёртывания.
Правило выпуска
Определяет, кто подтверждает выпуск, какие нужны доказательства и когда истекает исключение.
Защищайте конвейер как рабочую систему
Исполнители заданий CI (runner) запускают исходный код и пакеты, иногда имея доступ к учётным данным рабочей среды. Компрометация может подменить артефакт сборки и открыть путь к рабочим системам. Выделяйте каждой задаче отдельную учётную запись с минимальными правами, используйте краткоживущие учётные данные, маскируйте секреты и планируйте их ротацию. Изолируйте недоверенные запросы на слияние от исполнителей с повышенными правами и секретов. Разделяйте среды сборки, фиксируйте версии сторонних действий и модулей, проверяйте их происхождение. Подписывайте артефакт и проверяйте подпись и источник при развёртывании. Регистрируйте и анализируйте изменения конвейера, использование учётных данных и необычное поведение исполнителей.
Следите за обратной связью и состоянием выпуска
Отслеживайте длительность сборки, нестабильные тесты, неудачные слияния, выявленные проблемы безопасности и время исправления. Проверки с большим числом ложных срабатываний снижают доверие команды; изучите результаты и скорректируйте правила. После выпуска наблюдайте за ошибками приложения, задержками и пользовательскими сценариями. Используйте поэтапное развёртывание, чтобы ограничить влияние проблем, и подготовьте возврат к прежнему артефакту при серьёзном ухудшении. Небольшие частые изменения упрощают поиск причины и откат.
