每当我更改 pom 文件中的 pom 版本时,我到 nexus 的工件上传阶段都会失败
My artifactory upload stage to nexus fails whenever i change my pom version in pom file
我正在使用声明性管道,每当我更改我的 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 file doesn't exists
at sp.sd.nexusartifactuploader.steps.NexusArtifactUploaderStep$Execution.run(NexusArtifactUploaderStep.java:242)
at sp.sd.nexusartifactuploader.steps.NexusArtifactUploaderStep$Execution.run(NexusArtifactUploaderStep.java:217)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution.call(AbstractSynchronousNonBlockingStepExecution.java:47)
at hudson.security.ACL.impersonate(ACL.java:290)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution.run(AbstractSynchronousNonBlockingStepExecution.java:44)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Finished: FAILURE
您的构建失败,因为您为 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, see this 答案为例。 ${pom.version}
在那里使用,它是从 pom.xml
文件中读取的。
因此您无需手动增加或传递版本,只需使用命令:
def pom = readMavenPom file: 'pom.xml'
然后您可以像这样指定您的文件:
"target/${pom.artifactId}-${pom.version}.${pom.packaging}"
此外,还有另一种自动更改工件版本的方法 - 通过在 Jenkins 管道中将其指定为 ${env.BUILD_NUMBER}
,然后将其作为参数传递给 mvn
命令。例如,在 的回答中。
我正在使用声明性管道,每当我更改我的 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 file doesn't exists at sp.sd.nexusartifactuploader.steps.NexusArtifactUploaderStep$Execution.run(NexusArtifactUploaderStep.java:242) at sp.sd.nexusartifactuploader.steps.NexusArtifactUploaderStep$Execution.run(NexusArtifactUploaderStep.java:217) at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution.call(AbstractSynchronousNonBlockingStepExecution.java:47) at hudson.security.ACL.impersonate(ACL.java:290) at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution.run(AbstractSynchronousNonBlockingStepExecution.java:44) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Finished: FAILURE
您的构建失败,因为您为 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, see this 答案为例。 ${pom.version}
在那里使用,它是从 pom.xml
文件中读取的。
因此您无需手动增加或传递版本,只需使用命令:
def pom = readMavenPom file: 'pom.xml'
然后您可以像这样指定您的文件:
"target/${pom.artifactId}-${pom.version}.${pom.packaging}"
此外,还有另一种自动更改工件版本的方法 - 通过在 Jenkins 管道中将其指定为 ${env.BUILD_NUMBER}
,然后将其作为参数传递给 mvn
命令。例如,在