当前位置: 首页 > 知识库问答 >
问题:

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

贺劲
2023-03-14

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

我正在使用声明性Jenkinsfile来构建和发布Maven和Gradle工件,并使用BuildInfo将每个操作(第1阶段=构建,第2阶段=发布)分成不同的阶段,但无法找出如何做到这一点。

试图找出一个可与Artifactory一起使用的声明性管道语法代码,以分离构建和发布阶段。我发现的所有示例要么不完整,要么不起作用,要么仅适用于脚本化管道。

我已经试过这里的说明了https://www.jfrog.com/confluence/display/RTF/Working詹金斯的管道工作

对于Maven,在rtMavenDeployer指令中设置“deployArtifacts:false”会导致buildinfo不会被发布,但仍然使用目标“clean install”部署工件。

组织。jfrog。建筑提取器。专家BuildInfoClientBuilder-部署

在我们看到的日志中(deployArtifacts:false):Artifactory Build Info Recorder:publish Build Info设置为false,将不会发布Build Info。。。

steps {
        rtMavenDeployer ( 
... 
deployArtifacts: false )

在后面的阶段中,我们使用rtPublishBuildInfo()将实际的buildInfo发布到Artifactory。

我还尝试创建两个单独的rtMavenDeployer用于构建,一个用于部署。

对于前任。

rtMavenDeployer (
id: builder
deployArtifacts: false
)

rtMavenDeployer (
id: deployer
deployArtifacts: true
)

使用build STAGE在各个构建和发布阶段中的后续引用:

rtMavenRun(
deployerId: 'builder'
goals: 'clean install'
)

部署阶段:

rtMavenRun(
deployerId: 'deployer'
goals: 'install'
)
rtPublishBuildInfo()

导致在手工工厂和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个答案

燕野
2023-03-14

最后我用了下面的东西。。。虽然我觉得有点难看。欢迎有更好的解决方案

建造阶段

      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"
        )
      }
 类似资料:
  • 我有几个不同repo的Jenkins声明性管道,它们触发数据库刷新,以及依赖于数据库的单元测试。这些Jenkins作业是从GitHub中的pull请求触发的。 为了避免资源冲突,我需要防止这些作业同时运行——无论是在每个项目内还是在各个项目之间。 “油门并发构建”插件似乎就是为此而构建的。 我已经安装了插件,并配置了如下类别: 我在Jenkins文件中添加了“throttle”选项,其中一个存储库

  • 我正在尝试在 Jenkins 中配置以下工作流模式: 构建战争文件 我似乎错过了一些东西。应用程序的组件(jar 文件等)似乎在目标版本/快照目录中很好地部署到 Artifactory 中。然而,最终的WAR神器似乎并没有存储在Artifactory中,尽管Jenkins清楚地指出该神器是成功构建的。 我使用的是标准目标:全新安装。我也尝试过(没有改变):全新安装重新打包 我安装了Jenkins的

  • 我的Jenkins流水线并行运行多个任务。似乎如果一个阶段失败,所有后续阶段将运行其<code>failure</code>post块(无论它们是否实际失败)。我不知道这是故意的还是我做错了什么。 注意:这个管道运行在一个Windows节点上,因此< code>bat('exit /b 1') 在上面的管道中,只有“失败阶段”失败,但在输出中我看到了这一点,这表明对这两个步骤都执行了< code>

  • 我试图用JenkinsFile构建一个Jenkins声明性管道。Jenkinsfile将出现在项目的回购中。

  • 我有一个Jenkins构建,它有两个要求。 > maven构建(.war),将war推送到工件上的快照或发布。 还将计划(.xml)文件推送到artifactory上的“计划”存储库-这需要在路径中包含pom版本(来自pom.xml)。 我无法用pom版本替换路径中的$POM-VERSION。到目前为止,我已经尝试了什么 Jenkins Maven Build-我似乎没有用这个选项将计划文件上传到

  • 我正在使用詹金斯声明管道,不知道是否有任何方法可以定期触发特定阶段。 我的意思是,当我们签出SCM时,管道会触发,但阶段2对我们的一些项目来说太长了。因此,我不想等待这个阶段,我只想每天运行这个阶段,但仍然将这个阶段保存在Jenkins文件中。 有没有办法做到这一点?这样做的最佳方法是什么?