#jenkins #gradle #jenkins-pipeline #artifactory
#дженкинс #gradle #дженкинс-конвейер #artifactory
Вопрос:
Я использую плагин Jenkins-Artifactory для развертывания jar-файла в репозитории в Artifactory. Используемый инструмент сборки — gradle. Похоже, что процесс не поддерживает несколько версий артефакта jar с метками времени.
Репозиторий использует макет ‘gradle-default’. Для поведения версии моментального снимка Maven установлено значение «Уникальный». Максимальное количество уникальных снимков установлено равным 30.
Я использую rtUpload и rtPublishBuildInfo для загрузки jar и соответствующей buildinfo в Artifactory.
Я вижу несколько версий buildinfo в репозитории ‘artifactory-build-info’ в формате BUILDNUMBER_TIMESTAMP.json, Однако jar-файл приложения каждый раз перезаписывается с именем как appname-VERSION.jar таким образом, в репозитории сохраняется только последняя версия.
Я попытался изменить поведение версии моментального снимка Maven на ‘Неуникальное’ и добавить ‘SNAPSHOT’ в строку версии. Это не решило проблему
конвейерный код для загрузки артефактов
// upload build artifacts to artifact repository
stage('publish to artifactory') {
steps {
rtUpload (
serverId: "ARTIFACTORY_SERVER_ID",
spec:
"""{
"files": [
{
"pattern": "kotlin-source/build/libs/appname-*.jar",
"target": "gradle-dev-local"
}
]
}""",
failNoOp: true,
)
}
}
stage ('Publish build info') {
steps {
rtPublishBuildInfo (
serverId: "ARTIFACTORY_SERVER_ID",
)
}
}
ожидается, что в репозитории будет присутствовать несколько артефактов с добавлением метки времени к имени.
В репозитории отображается только один jar.
После публикации артефакта существующий jar в репозитории перемещается в корзину
Ответ №1:
Способ работы с уникальными снимками заключается в том, что когда для параметра установлено значение UNIQUE, а макет репозитория представляет собой моментальные снимки Maven (или Gradle), и файл развертывается с версией МОМЕНТАЛЬНОГО снимка в соответствии с макетом, Artifactory переименует его на лету, чтобы содержать уникальный идентификатор моментального снимка Maven.
Публикация Maven позаботится о версии моментального снимка, а Artifactory позаботится о том, чтобы сделать эти снимки уникальными (и об очистках). Вам нужно только убедиться, что ваша строка версии заканчивается на -SNAPSHOT
.
Комментарии:
1. ДА. Именно такого поведения я и ожидал. Однако репозиторий, похоже, содержит один appname-0.1-SNAPSHOT.jar создается последней сборкой после нескольких запусков конвейера. Вы говорите, и файл развертывается с версией МОМЕНТАЛЬНОГО СНИМКА в соответствии с макетом : я устанавливаю цель в rtUpload только на имя репозитория. Нужно ли мне следовать определенной структуре каталогов?
2. Также макет репозитория gradle выглядит примерно так, как показано ниже
[orgPath]/[module]/[baseRev](-[folderItegRev])/[module]-[baseRev](-[fileItegRev])(-[classifier]).[ext]
rtUpload, похоже, не создает эту структуру каталогов в репозитории и не загружает артефакт. Он размещается непосредственно под корнем репозитория.