Есть ли способ изменить путь URL-адреса Nexus во время загрузки артефакта в конвейере Jenkins

Я пытаюсь загрузить артефакт в нексус, используя конвейер Jenkins, в котором общий конвейер заканчивается на последнем этапе. где артефакт не загружается в репозиторий нексуса.

Скажем, пример: http://localhost:8081/nexus/content/repositories/releases это мой существующий репозиторий, и я пытаюсь загрузить в него артефакт. Но когда я запускаю сборку конвейера Jenkins, я вижу, что URL-адрес достигает: http://localhost:8081/nexus/content/repositories/repository/releases. Я совершенно не понимаю, откуда берется «репозиторий» в указанном выше URL.

Я столько раз пытался отредактировать URL-адрес, но все равно получаю ту же проблему

Загрузка артефакта blt-server.war началась ....

GroupId: нуль

ArtifactId: blt-server

Классификатор:

Тип: война

Версия: 0.0.1-SNAPSHOT

Файл: blt-server.war

Репозиторий: релизы

Скачивание: http://localhost:8081/nexus/content/repositories/repository/releases/maven-metadata.xml

Загрузка: http://localhost:8081/nexus/content/repositories/repository/Release/blt-server/0.0.1-SNAPSHOT/blt-server-0.0.1-20190906.152523-1.war

Выполнено на 10% (5,5 МБ / 55 МБ).

Выполнено на 20% (11 МБ / 55 МБ).

30% выполнено (17 МБ / 55 МБ).

Выполнено на 40% (22 МБ / 55 МБ).

Выполнено на 50% (28 МБ / 55 МБ).

Выполнено на 60% (33 МБ / 55 МБ).

70% выполнено (39 МБ / 55 МБ).

Выполнено на 80% (44 МБ / 55 МБ).

Завершено на 90% (50 МБ / 55 МБ).

Выполнено на 100% (55 МБ / 55 МБ).

Не удалось развернуть артефакты: не удалось найти артефакт: blt-server: war: 0.0.1-20190906.152523-1 в выпусках (http://localhost:8081/nexus/content/repositories/repository/Release)

Не удалось загрузить файл blt-server.war.

Я ожидаю, что URL-адрес должен быть таким: http://localhost:8081/nexus/content/repositories/releases при загрузке файла войны, но это не так.

Вот мой сценарий конвейера:

pipeline {
    agent {
        label "master"
    }
    tools {
    maven "Maven-3.5.2" 
 }
 environment {
     NEXUS_VERSION = "nexus3"
     NEXUS_PROTOCOL = "http"
     NEXUS_URL = "localhost:8081/nexus/content/repositories"
     NEXUS_REPOSITORIES = "releases"
     NEXUS_CREDENTIAL_ID = "SonatypeREMNexus3"
     CREDENTIALSID= "********confidential***"
 }
 stages {
     stage("clone bitbucket") {
         steps { 
             checkout(
        [
            $class: 'GitSCM', 
            branches: [[name: 'master']], 
            doGenerateSubmoduleConfigurations: false, 
            extensions: [
                [$class: 'RelativeTargetDirectory', relativeTargetDir: 'build'] 
            ], 
            submoduleCfg: [], 
            userRemoteConfigs: [
                [
                    credentialsId: '********confidential***',
                    url: 'ssh://[email protected]:7999/blt/blt-server.git'
                ]
            ]
        ]
    )

             }
     }
     stage('Build & Test') {
         steps {
             script {
        withMaven(
            options: [artifactsPublisher(disabled: true)],
            jdk: 'JAVA-1.8.0_152',
            maven: 'Maven-3.5.2') {
            sh "mvn clean package -f build/pom.xml"
        }
     }
    }
     }
     stage("publish to nexus") {
         steps {
             script {
             pom = readMavenPom file: "build/pom.xml";
             filesByGlob = findFiles(glob: "build/target/*.${pom.packaging}");
             echo "${filesByGlob[0].name} ${filesByGlob[0].path} ${filesByGlob[0].directory} ${filesByGlob[0].length} ${filesByGlob[0].lastModified}"
             artifactPath = filesByGlob[0].path;
             artifactExists = fileExists artifactPath;
             if(artifactExists) {
                 echo "*** File: ${artifactPath}, group: ${pom.groupId}, packaging: ${pom.packaging}, version: ${pom.version}"
                 nexusArtifactUploader(
                 nexusVersion: NEXUS_VERSION,
                 protocol: NEXUS_PROTOCOL,
                 nexusUrl: NEXUS_URL,
                 groupId: pom.groupId,
                 version: pom.version,
                 repository: NEXUS_REPOSITORIES,
                 credentialsId: NEXUS_CREDENTIAL_ID,
                 artifacts: [
                     [artifactId: pom.artifactId,
                     classifier: '',
                     file: artifactPath,
                     type: pom.packaging],
                     [artifactId: pom.artifactId,
                     classifier: '',
                     file: "build/pom.xml",
                     type: "pom"]
                ]
            );
                 } else {
                     error "*** File: ${artifactPath}, could not be found";
                 }

             }
         }
     }
     }

 }

person nk07    schedule 06.09.2019    source источник
comment
Почему ваш groupid равен нулю? Maven загрузит в coords.на основе GAV. Какие репозитории (и какого типа) вы определили в Nexus?   -  person Ian W    schedule 08.09.2019
comment
Не предоставив образец кода того, что вы используете в своем конвейере и где вы пытались редактировать URL-адрес, трудно определить, в чем проблема. URL-адрес репозитория мог быть указан либо в вашем проекте pom.xml, либо в ~/.m2/settings.xml в вашем агенте сборки. Если в вашем проекте не используется pom.xml, URL-адрес репозитория может даже быть частью команды mvn deploy в качестве параметра -Durl или, если вы используете nexusArtifactUploader, его можно указать как nexusUrl. Много возможностей!   -  person Dibakar Aditya    schedule 08.09.2019
comment
@Dibakar Aditya Спасибо за быстрый взгляд. Я загрузил свой код конвейера выше. пожалуйста, проверьте.   -  person nk07    schedule 09.09.2019
comment
@IanW Спасибо за быструю проверку. Что касается groupid null, я не уверен, почему он показывает его как null. Я проверил pom.xml, в котором он имеет следующее: `` ‹parent› ‹groupId› org.springframework.boot ‹/groupId› ‹artifactId› spring- boot-starter-parent ‹/artifactId› ‹version› 2.1.5.RELEASE ‹/version› ‹relativePath /› ‹! - родительский поиск из репозитория -› ‹/parent› `` `   -  person nk07    schedule 09.09.2019
comment
@ nk07 Спасибо, что поделились дополнительной информацией. Это упрощает поиск и устранение неисправностей.   -  person Dibakar Aditya    schedule 09.09.2019


Ответы (1)


Проблема здесь:

NEXUS_VERSION = "nexus3"
NEXUS_PROTOCOL = "http"
NEXUS_URL = "localhost:8081/nexus/content/repositories"

Указанная версия Nexus - Nexus 3, но URL соответствует формату Nexus 2.

Nexus 3 использует формат URL /repository/<repo-id>/<path-of-file>, тогда как Nexus 2 использует /content/repositories/<repo-id>/<path-of-file>.

Если вы используете Nexus 2, просто обновите версию NEXUS_VERSION = "nexus2".

Если на Nexus 3:

  1. Обновите плагин Nexus Artifact Uploader до версии 2.6 или выше.
  2. Замените localhost:8081/nexus/content/repositories на localhost:8081/nexus или localhost:8081, в зависимости от вашего репозитория Nexus.

Вы также можете настроить Nexus 3 для использования устаревших путей URL.

person Dibakar Aditya    schedule 09.09.2019
comment
Отлично и быстро! Он работает фантастически .. Престижность вам !!! @Dibakar Aditya - person nk07; 09.09.2019
comment
@ nk07 Спасибо! Рад, что смог помочь. Вы можете пометить это как принятый ответ, чтобы другие, столкнувшиеся с подобной проблемой, тоже могли найти его полезным. - person Dibakar Aditya; 09.09.2019
comment
И одна быстрая вещь, развернутая война и снимок в нексусе с отметками даты и времени. Я пытаюсь отключить его, и мне нужно, чтобы имя файла выглядело как demo-0.0.1.war. Я пытался отключить его, используя uniqueVersion: false, но безуспешно. Не могли бы вы рассказать мне, в чем я ошибаюсь? @Dibakar Aditya - person nk07; 09.09.2019
comment
Боюсь, этот плагин не поддерживает неуникальные версии. Фактически, поддержка даже удалена в Maven 3, если вы хотите развернуть с использованием mvn. - person Dibakar Aditya; 09.09.2019
comment
Спасибо за информацию. Есть ли альтернативный способ удалить метку времени из файла артефакта? в настоящее время я вижу все имена файлов, такие как: Родительский каталог `` demo-server-0.0.1-20190909.162347-1.war demo-server-0.0.1-20190909.162347-1.war.md5 demo-server-0.0. 1-20190909.162347-1.war.sha1 demo-server-0.0.1-20190909.162350-2.pom demo-server-0.0.1-20190909.162350-2.pom.md5 demo-server-0.0.1-20190909.162350-2.pom .sha1 '' '' - person nk07; 10.09.2019
comment
Поскольку ваш проект Maven, вы можете использовать mvn deploy с -DuniqueVersion=false, как указано здесь: maven.apache.org/plugins-archives/maven-deploy-plugin-2.6/ или обновив свой pom.xml как здесь stackoverflow.com/a/7739898/8895640s. Но, как я уже упоминал ранее, это будет временное решение, поскольку поддержка неуникальных версий была удалена. - person Dibakar Aditya; 12.09.2019