Какие этапы включает идеальный CI процесс кроме сборки
Что проверяют
Понимаете ли вы, что CI это не «собралось, значит работает», а набор проверок, которые быстро говорят разработчику, можно ли вливать изменение. Следом часто спрашивают, где кончается CI и начинается CD и как удержать пайплайн в пределах десяти минут.
Как отвечать
Опишите этапы в порядке от дешёвых к дорогим, чтобы падать как можно раньше:
- стиль и статический анализ: Checkstyle или Spotless, SpotBugs, Error Prone, итог в SonarQube с quality gate, который реально валит сборку;
- юнит-тесты: JUnit 5 через Surefire, покрытие JaCoCo с порогом на новый код, а не на весь проект;
- интеграционные тесты: Failsafe на фазе
verify, Testcontainers поднимает настоящий PostgreSQL или Kafka вместо H2 и моков; - миграции: Flyway или Liquibase прогоняются на чистой базе в контейнере, чтобы сломанный скрипт не доехал до стенда;
- контрактные тесты: Spring Cloud Contract или Pact, если сервисы общаются по HTTP или через очереди;
- безопасность: OWASP Dependency-Check по зависимостям, Trivy по образу, SBOM в формате CycloneDX, поиск секретов в коде;
- публикация артефакта: jar в Nexus или Artifactory, образ через Jib или Dockerfile с тегом по хэшу коммита.
Два принципа стоит проговорить отдельно. Артефакт собирается один раз и дальше продвигается по окружениям без пересборки. Сборка воспроизводима: Maven Wrapper или Gradle Wrapper в репозитории, кеш зависимостей между прогонами, никаких SNAPSHOT в релизе. Обновления зависимостей приносят боты вроде Dependabot или Renovate отдельными PR, сам Maven ничего не обновляет.
Деплой на стенд, смоук-тесты и мониторинг относятся уже к CD. Упомяните их, но не выдавайте за этапы CI.
Где спотыкаются
Сваливают все тесты в одну стадию на сорок минут. Разработчик перестаёт ждать результат, и смысл быстрой обратной связи пропадает.
Мирятся с флаки-тестами и ставят автоповтор. Через месяц красный пайплайн никого не пугает, и настоящая регрессия проходит незамеченной.
Настраивают анализ, который только пишет отчёт. Если quality gate и порог по уязвимостям не останавливают сборку, это украшение, а не проверка.