编辑:很抱歉格式化:(我是这个新手..将尝试清理它。
我正在使用声明性的Jenkinsfile来构建带有buildInfo的Maven和Gradle Artifact 并将其发布到Artifactory,试图在不同的阶段分离每个 Action (stage1 = build,stage2 = publish),但是无法弄清楚该怎么做。
试图找出一个有效的Declarative Pipeline语法代码,与Artifactory一起使用以分离构建和发布阶段。我发现的所有示例都不完整,不起作用或仅适用于脚本化管道。
我尝试了在这里找到的说明https://www.jfrog.com/confluence/display/RTF/Working+With+Pipeline+Jobs+in+Jenkins
对于Maven,在rtMavenDeployer指令中设置'deployArtifacts:false'会导致buildinfo无法发布,但是仍使用目标“全新安装”来部署 Artifact 。
在日志中,我们看到(带有deployArtifacts:false):
Artifactory Build Info Recorder:将构建信息发布为false,将不发布构建信息...
steps {
rtMavenDeployer (
...
deployArtifacts: false )
在以后的阶段中,我们使用
rtPublishBuildInfo()将实际的buildInfo发布到Artifactory。
我还尝试创建两个单独的rtMavenDeployer进行构建,一个用于部署。
对于前。
rtMavenDeployer (
id: builder
deployArtifacts: false
)
rtMavenDeployer (
id: deployer
deployArtifacts: true
)
以后在各个构建和发布阶段中使用的引用
建立阶段:
rtMavenRun(
deployerId: 'builder'
goals: 'clean install'
)
部署阶段:
rtMavenRun(
deployerId: 'deployer'
goals: 'install'
)
rtPublishBuildInfo()
在Artifactory中生成了重复的buildInfo,并导致x2夸大了已注册的 Artifact ...
是否有明确的方法可以在声明式管道中进行不同的操作?
期望能够在一个阶段中使用Declarative Pipeline语法构建 Artifact ,并在稍后阶段使用buildInfo部署实际的Maven / Gradle Artifact 。
根据我的理解,这是在脚本化管道的不同阶段中完成的工作:
stage ('Test') {
rtMaven.run pom: 'maven-example/pom.xml', goals: 'clean test'
}
stage ('Install') {
rtMaven.run pom: 'maven-example/pom.xml', goals: 'install', buildInfo: buildInfo
}
stage ('Deploy') {
rtMaven.deployer.deployArtifacts buildInfo
}
stage ('Publish build info') {
server.publishBuildInfo buildInfo
}
}
最佳答案
我最终使用了类似下面的内容……尽管我认为这有点丑陋。
任何更好的解决方案都非常欢迎!
建立阶段
steps {
rtMavenRun (
tool: 'MVN-360',
pom: 'pom.xml',
goals: 'clean install',
opts: '-Dartifactory.publish.artifacts=false -Dartifactory.publish.buildInfo=false',
resolverId: 'maven-resolver',
deployerId: 'maven-deployer'
)
}
部署阶段
steps {
rtMavenRun (
tool: 'MVN-360',
pom: 'pom.xml',
goals: 'install',
opts: '-Dartifactory.publish.artifacts=true -Dartifactory.publish.buildInfo=true',
resolverId: 'maven-resolver',
deployerId: 'maven-deployer'
)
rtPublishBuildInfo (
serverId: "Artifactory"
)
}