Как загрузить моментальные версии артефакта сборки в репозиторий gradle в Artifactory

#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, похоже, не создает эту структуру каталогов в репозитории и не загружает артефакт. Он размещается непосредственно под корнем репозитория.