Мой этап загрузки артефакта в Nexus не проходит всякий раз, когда я меняю версию POM в файле POM - PullRequest
0 голосов
/ 21 января 2019

Я использую декларативный конвейер, и всякий раз, когда я меняю свою версию pom, моя стадия загрузки артефакта на nexus не выполняется.Например: если моя версия снимка 0.3, моя сборка прошла успешно.Если в моем файле pom изменить версию моего снимка на 0.4 и попытаться создать ту же сборку, сборка завершится неудачно на этапе загрузки артефакта.Поэтому мой вопрос заключается в том, что каждый раз нам нужно обновлять и файл jenkins, и файл pom, чтобы сборка работала правильно?Есть ли декларативный способ увеличения версии версии?

stage('Upload Artifacts') {
    steps {
        nexusArtifactUploader artifacts: [[artifactId: 'com.lfx', classifier: 'debug', file: 'C:/Program Files (x86)/Jenkins/workspace/Pipeline/target/common-0.4-SNAPSHOT.jar', type: 'jar']], credentialsId: 'f97e3ef5-19ca-4903-b2c5-74a7821062de', groupId: 'LLL', nexusUrl: 'localhost:8081/', nexusVersion: 'nexus3', protocol: 'http', repository: 'LLLTEST', version: '0.4-SNAPSHOT'
    }
}

Ошибка:

java.io.IOException: файл common-0.3-SNAPSHOT.jar несуществует по адресу sp.sd.nexusartifactuploader.steps.NexusArtifactUploaderStep $ Execution.run (NexusArtifactUploaderStep.java:242) по адресу sp.sd.nexusartifactuploader.steps.NexusArtifactUploaderStep $ Execution.tifjp.jp.workflow.steps.AbstractSynchronousNonBlockingStepExecution $ 1 $ 1.call (AbstractSynchronousNonBlockingStepExecution.java:47) по адресу hudson.security.ACL.impersonate (ACL.java:290) в org.jenkinsci.plugins.workonNec: 44) на java.util.concurrent.Executors $ RunnableAdapter.call (неизвестный источник) на java.util.concurrent.FutureTask.run (неизвестный источник) на java.util.concurrent.ThreadPoolExecutor.runWorker (неизвестный источник) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (Unизвестный источник) на java.lang.Thread.run (неизвестный источник) Закончено: НЕИСПРАВНОСТЬ

1 Ответ

0 голосов
/ 21 января 2019

Ваша сборка не удалась, потому что вы указали жестко закодированное значение для nexusArtifactUploader параметра файла (и то же самое для параметра версии):

file: 'C:/Program Files (x86)/Jenkins/workspace/Pipeline/target/common-0.4-SNAPSHOT.jar'

Вместо этого вам нужно использовать динамическую версию, как в этом примере:

nexusArtifactUploader(
    nexusVersion: 'nexus3',
    protocol: 'http',
    nexusUrl: 'my.nexus.address',
    groupId: 'com.example',
    version: version,
    repository: 'RepositoryName',
    credentialsId: 'CredentialsId',
    artifacts: [
        [artifactId: projectName,
         classifier: '',
         file: 'my-service-' + version + '.jar',
         type: 'jar']
    ]
 )

Также вы можете использовать Плагин Nexus Platform , см., Например, этот ответ. ${pom.version} используется там, и он читается прямо из файла pom.xml.

Так что вам не нужно увеличивать или передавать версию вручную, просто используйте команду:

def pom = readMavenPom file: 'pom.xml'

И тогда вы можете указать свой файл как:

"target/${pom.artifactId}-${pom.version}.${pom.packaging}"

Кроме того, существует другой способ автоматического изменения версии артефакта, указав его как ${env.BUILD_NUMBER} в конвейере Jenkins, а затем передайте его в качестве параметра команде mvn. Например, как в этом ответе.

...