将jenkins人工制品的后期构建步骤转换为管道阶段

时间:2019-11-11 22:18:37

标签: java maven jenkins-pipeline artifactory

我正在将UI中已配置的Jenkins作业转换为使用声明性管道脚本配置的作业。

这是一个由Maven构建的Java项目,具有部署到Artifactory的构建后动作

构建和测试步骤很简单。我们可以使用这个用户界面

the maven UI

并将其转换为mvn命令sh "mvn clean install"

后构建步骤的配置在用户界面中很简单

the post build artifactory UI

这已选中三个文本框

  1. 部署Maven工件
  2. 从构建信息中过滤排除的工件(我认为没有)
  3. 捕获并发布构建信息

这将生成并上传一个丰富的buildInfo.json并将正确的工件上传到我们的工件服务器。

我想用流水线步骤代替它。...阅读本文档https://www.jfrog.com/confluence/display/RTF/Declarative+Pipeline+Syntax建议,应通过让人工插件运行maven命令来完成构建maven作业。我想避免这种情况,因为我们目前不这样做,并且 我最终希望不再需要在服务器上存储该项目的工件。

在pom中我们会看到

    <groupId>some.value</groupId>
    <artifactId>my-app</artifactId>
    <version>1.1.184</version>

我需要一个部分起作用的脚本:

stage('publish common code to artifactory') {
          steps {
            rtUpload (
                  serverId: 'Artifactory',
                  spec: '''{
                        "files": [
                          {
                            "pattern": "applications/my-app/pom.xml",
                            "target": "libs-release-local"
                          }
                       ]
                  }''',

                  buildName: 'my-app',
                  buildNumber: env.GIT_HASH_VERSION
              )
              rtPublishBuildInfo (
                    serverId: "Artifactory",
                    buildName: 'my-app',
                    buildNumber: env.GIT_HASH_VERSION
                )
          }
        }

这会将pom发布到工件,但最初将其发布到some/value/my-app/my-app-1.1.184.pom的地方,我的管道版本将发布到/pom.xml的根目录

Artifactory看起来能够从pom读取信息并使用它来正确放置工件,而无需我编写代码,但是怎么办?

1 个答案:

答案 0 :(得分:1)

可能对某人有所帮助的示例:

  stage("deploy_mvn") {
                environment {
                    // Must define environmental variable for maven
                    MAVEN_HOME = '/usr/share/maven'
                }
                steps {
                    script {
                        def artserver = Artifactory.newServer url: 'http://example.com/artifactory', credentialsId: 'blahblah'
                        def rtMaven = Artifactory.newMavenBuild()
                        rtMaven.resolver server: artserver, releaseRepo: 'my-repo', snapshotRepo: 'my-ss-repo'
                        rtMaven.deployer server: artserver, releaseRepo: 'my-local', snapshotRepo: 'my-snapshot-local'
                        rtMaven.deployer.artifactDeploymentPatterns.addInclude("*.pom").addInclude("*.war").addInclude("*.jar")
                        rtMaven.deployer.deployArtifacts = true
                        def buildInfo = rtMaven.run pom: 'pom.xml', goals: 'clean install'
                    }
                }
            }