每当我在pom文件中更改pom版本时,我向连接的工件上传阶段就会失败

时间:2019-01-21 13:28:04

标签: jenkins jenkins-pipeline nexus

我使用的是描述性管道,每当我更改pom版本时,我的工件上载阶段便会失败。例如:如果我的快照版本为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.run(NexusArtifactUploaderStep.java:217)       在org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution $ 1 $ 1.call(AbstractSynchronousNonBlockingStepExecution.java:47)       在hudson.security.ACL.impersonate(ACL.java:290)       在org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution $ 1.run(AbstractSynchronousNonBlockingStepExecution.java:44)       在java.util.concurrent.Executors $ RunnableAdapter.call(未知来源)       在java.util.concurrent.FutureTask.run(未知来源)       在java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)       在java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源)       在java.lang.Thread.run(未知来源)   完成:失败

1 个答案:

答案 0 :(得分:0)

由于您为nexusArtifactUploader文件参数(和版本参数相同)指定了硬编码值,因此构建失败:

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

您需要改为使用动态版本,例如在this示例中:

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 Plugin,例如参见this答案。此处使用${pom.version},可以从pom.xml文件中读取。

因此,您无需手动增加或传递版本,只需使用命令:

def pom = readMavenPom file: 'pom.xml'

然后您可以指定文件,例如:

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

此外,还有另一种自动更改工件版本的方法-通过在Jenkins管道中将其指定为${env.BUILD_NUMBER},然后将其作为参数传递给mvn命令。例如,像在this答案中一样。

相关问题