声明性Jenkinsfile使用单独的阶段进行Maven / Gradle构建并发布到Artifactory

时间:2019-06-27 08:33:31

标签: maven gradle jenkins-pipeline artifactory

编辑:很抱歉格式化((我是新手。..将尝试清理它。

我正在使用声明性的Jenkinsfile来构建带有buildInfo的Maven和Gradle工件并将其发布到Artifactory,试图在不同的阶段分离每个动作(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无法发布,但仍会使用目标“全新安装”来部署工件。

  

org.jfrog.build.extractor.maven.BuildInfoClientBuilder-部署>工件:xxx

在日志中,我们看到(带有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膨胀了已注册的工件...

在声明式管道中是否有明确的动作分离方法?

期望能够在一个阶段中使用声明性管道语法构建工件,并在稍后阶段使用buildInfo部署实际的Maven / Gradle工件。

根据我的理解,这是在脚本化管道的不同阶段中完成的步骤:

    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
    }
}

1 个答案:

答案 0 :(得分:0)

我最终使用了类似下面的内容……尽管我认为这有点丑陋。 任何更好的解决方案都非常欢迎!

已建阶段

      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"
        )
      }