maven - 如何设置 Jenkinsfile 以将 Maven Artifact 上传到 Artifactory

标签 maven jenkins artifactory jenkins-pipeline

我的 .Jenkinsfile 是这样的:

properties([[$class: 'GitLabConnectionProperty', gitLabConnection: 'gitlab@srv']])
node {
  env.JAVA_HOME = tool 'JDK 7'
  def mvnHome = tool 'Maven 3.2.2'
  def nodeJS = tool 'IA_NodeJS'
  env.PATH = "${mvnHome}/bin:${nodeJS}/bin:${env.JAVA_HOME}/bin:${env.PATH}"

  stage ('checkout') {
    checkout scm
  }

  stage ('build') {
    gitlabCommitStatus("build") {
      // your build steps
      sh 'mvn clean install -Denv=dev -P !faster'
    }
  }

  stage ('upload') {
    gitlabCommitStatus("upload") {
      def server = Artifactory.server "artifactory@ibsrv02"
      def buildInfo = Artifactory.newBuildInfo()
      buildInfo.env.capture = true
      buildInfo.env.collect()

      def uploadSpec = """{
        "files": [
          {
            "pattern": "**/target/*.jar",
            "target": "libs-snapshot-local"
          }, {
            "pattern": "**/target/*.pom",
            "target": "libs-snapshot-local"
          }, {
            "pattern": "**/target/*.war",
            "target": "libs-snapshot-local"
          }
        ]
      }"""
      // Upload to Artifactory.
      server.upload spec: uploadSpec, buildInfo: buildInfo

      buildInfo.retention maxBuilds: 10, maxDays: 7, deleteBuildArtifacts: true
      // Publish build info.
      server.publishBuildInfo buildInfo
    }
  }
}

使用这种方法 jenkins 上传 Artifact 而不进行“maven 风格”布局(包子文件夹和 poms)。

我想将生成的 Artifact 上传到 Artifactory,就像正常工作上传它并选中“Maven3-Artifactory Integration”一样。

最佳答案

从 Artifactory Jenkins 插件版本 2.7.2 开始,您可以使用 Artifactory pipeline DSL 运行 Maven 和 Gradle .

使用新的 DSL,您的构建脚本将如下所示:

  def server = Artifactory.server "artifactory@ibsrv02"
  def buildInfo = Artifactory.newBuildInfo()
  buildInfo.env.capture = true
  def rtMaven = Artifactory.newMavenBuild()
  rtMaven.tool = MAVEN_TOOL // Tool name from Jenkins configuration
  rtMaven.opts = "-Denv=dev"
  rtMaven.deployer releaseRepo:'libs-release-local', snapshotRepo:'libs-snapshot-local', server: server
  rtMaven.resolver releaseRepo:'libs-release', snapshotRepo:'libs-snapshot', server: server

  rtMaven.run pom: 'pom.xml', goals: 'clean install', buildInfo: buildInfo

  buildInfo.retention maxBuilds: 10, maxDays: 7, deleteBuildArtifacts: true
  // Publish build info.
  server.publishBuildInfo buildInfo

您可以在 jenkins-pipeline-examples 中找到更多 Artifactory 管道 DSL 示例。 .

关于maven - 如何设置 Jenkinsfile 以将 Maven Artifact 上传到 Artifactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39412014/

相关文章:

java - 无法访问 Maven 的 pom.xml 中设置的属性,System.getProperty 始终返回 null

maven - 禁用父 POM 中定义的 Maven 插件

maven - Gradle 可以将不同的 Artifact 上传到不同的 Maven 存储库吗?

java - Maven 依赖项 :get get LATEST ignore repositories from settings. xml

java - NetBeans IDE/jMonkey SDK 中没有 Maven 选项卡

maven - 在 dropwizard-hibernate 中生成模式

git - Jenkins Git SSL 证书错误

jenkins - 如何静态检查使用共享库的 Jenkins 管道的代码?

linux - 过滤快照版本

maven - 使用没有 pom 文件的 Maven 存储库