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

标签 maven gradle jenkins-pipeline artifactory

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

我正在使用声明性的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 。

org.jfrog.build.extractor.maven.BuildInfoClientBuilder - Deploying >artifact: 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夸大了已注册的 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"
        )
      }

关于maven - 声明性Jenkinsfile使用单独的阶段进行Maven/Gradle构建并发布到Artifactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56787054/

相关文章:

linux - Jenkinsfile 环境变量未反射(reflect)在脚本部分中调用的 Makefile 中

java - 为什么 Java WebDriver 不使用更新的 WebDriver 扩展启动 Firefox?

java - Jenkins war 部署到 Tomcat 7

java - 来自克隆的 GitHub Java(带有 jni 和 C)存储库的 Netbeans Maven 项目

gradle - 我可以运行一组特定的Gradle任务吗

docker - stash/unstash 将数据从构建容器传输到其他节点(在 jenkins 中)

java - 进行持续交付时,自动项目版本的 Maven 方式是什么?

java - 使用gradle将war文件发布到artifactory

mongodb - Gradle-运行mongoDB脚本

jenkins - 如何在 'parallel' 部分的 jenkins 管道中使用 'post' 选项?