Где хранятся артефакты сборки
Что проверяют
Понимаете ли вы весь путь артефакта: от каталога сборки до репозитория, откуда его берут CI и прод, и отличаете ли собственные артефакты от кэша зависимостей. Следом обычно спрашивают про SNAPSHOT и релизы или про то, почему нельзя пересобирать артефакт под каждое окружение.
Как отвечать
Идите по уровням хранения:
- каталог сборки: Maven кладёт JAR или WAR в
target/послеmvn package, Gradle вbuild/libs/. Это временное место, его чистятmvn cleanиgradle clean; - локальный репозиторий:
mvn installкопирует артефакт в~/.m2/repositoryпо пути изgroupId,artifactIdиversion, чтобы соседний проект на этой машине мог его подключить. В Gradle то же делаетpublishToMavenLocalиз плагинаmaven-publish, а скачанные зависимости Gradle держит отдельно, в~/.gradle/caches; - удалённый репозиторий: Nexus, Artifactory, GitHub Packages, GitLab Package Registry. Публикуют через
mvn deploy(адрес вdistributionManagement, учётные данные вsettings.xml) или задачуpublishв Gradle. Открытые библиотеки уходят в Maven Central; - реестр образов: если приложение едет в контейнере, итоговый артефакт это Docker-образ, и живёт он в Harbor, GitLab Container Registry или облачном реестре.
Назовите разделение репозиториев: SNAPSHOT-версии перезаписываются, релизные неизменяемы, и повторная публикация той же версии в релизный репозиторий обычно запрещена. Плюс политика очистки старых снапшотов, иначе хранилище разрастается.
И главный принцип: собрать один раз и продвигать один и тот же артефакт по стендам. Тогда в прод уходит ровно то, что прошло тесты.
Где спотыкаются
Путают ~/.m2/repository и target/. Собственный JAR попадает в локальный репозиторий только после install, а не после любой сборки.
Считают хранилищем артефакты джобы CI: artifacts в GitLab или upload-artifact в GitHub Actions. Они живут ограниченный срок и нужны для передачи файлов между шагами пайплайна.
Пересобирают проект отдельно для теста и прода или перезаписывают релизную версию. После этого нельзя гарантировать, что в прод попал проверенный код.