2015-05-19 127 views
2

使用Jenkins Artifactory插件和Gradle,我可以成功部署到我的Artifactory实例。但是,我无法使用输入到Jenkins配置中的凭据来解析来自同一存储库的工件。Jenkins Artifactory插件如何将解析器凭证传递给Gradle?

以下是Artifactory中Artifactory的“生成构建脚本”功能所采用的build.gradle。对詹金斯

apply plugin: 'java' 

sourceCompatibility = 1.5 
version = '1.0' 
buildscript { 
    repositories { 
     maven { 
      url 'http://artifactory.myorg.com:8081/artifactory/plugins-release' 
      credentials { 
       username = "${artifactory_user}" 
       password = "${artifactory_password}" 
      } 
     } 

    } 
    dependencies { 
     //Check for the latest version here: http://plugins.gradle.org/plugin/com.jfrog.artifactory 
     classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.3" 
    } 
} 

allprojects { 
    apply plugin: "com.jfrog.artifactory" 
} 

artifactory { 
    contextUrl = "${artifactory_contextUrl}" //The base Artifactory URL if not overridden by the publisher/resolver 
    publish { 
     repository { 
      repoKey = 'libs-release-local' 
      username = "${artifactory_user}" 
      password = "${artifactory_password}" 
      maven = true 

     } 
    } 
    resolve { 
     repository { 
      repoKey = 'libs-release' 
      username = "${artifactory_user}" 
      password = "${artifactory_password}" 
      maven = true 

     } 
    } 
} 


dependencies { 
    compile group: "com.myorg", name: "internal-library", version: '1.0' 

    testCompile group: 'junit', name: 'junit', version: '4.11' 
} 

作业配置: Job configuration

詹金斯Artifactory的插件配置: enter image description here

错误:

FAILURE: Build failed with an exception. 

* Where: 
Build file '/var/lib/jenkins/jobs/deleteme/workspace/build.gradle' line: 10 

* What went wrong: 
A problem occurred evaluating root project 'untitled2'. 
> Could not find property 'artifactory_user' on Credentials [username: null]. 

在当地,解决文物工作(artifactory_user等等都解决了,因为我在我的配置他们cal ~/.gradle/gradle.properties)。但是,构建失败,因为artifactory_user未定义。当然,我可以配置一个gradle.properties供Jenkins使用(而且这个工作),但是假设是如何工作的?看起来Jenkins Artifactory插件Gradle集成应该以某种方式传达解析器凭证。有没有办法做到这一点,而不需要在Jenkins的两个地方复制证书?

回答

2

TL;博士username = "${project.getProperty('artifactory.publish.username')}"

Note: I haven't tested this on a Jenkins machine yet

詹金斯artifactory的插件的gradle这个整合似乎做两件事情

  • 注入artifactory的配置使用[gradle这个初始化脚本]
  • 提供构建和工件配置信息

两者都涉及将文件写入临时文件夹(即,在linux上为/tmp)。如果您有权访问构建服务器,那么您的临时文件夹中可能会有很多buildInfo\d{19}.propertiesinit-artifactory\d{19}gradle文件。

查看这些buildInfo文件的其中一个显示解析和发布凭证分别存储在artifactory.resolve.usernameartifactory.publish.username中。

尝试设置并尝试使用${artifactory.publish.username}直接在我的本地计算机上不起作用;我认为它与在设置之前尝试访问属性的gradle有关。但project.getProperty方法的作品。

buildscript { 
    repositories { 
     maven { 
      url 'http://artifactory.myorg.com:8081/artifactory/plugins-release' 
      credentials { 
       username = "${project.getProperty('artifactory.resolve.username')}" 
       password = "${project.getProperty('artifactory.resolve.password')}" 
      } 
     } 
    } 
} 

artifactory { 
    publish { 
     contextUrl = "${project.getProperty('artifactory.publish.contextUrl')}" 
     repository { 
      repoKey = 'libs-release-local' 
      username = "${project.getProperty('artifactory.publish.username')}" 
      password = "${project.getProperty('artifactory.publish.password')}" 
      maven = true 

     } 
    } 
    resolve { 
     repository { 
      contextUrl = "${project.getProperty('artifactory.resolve.contextUrl')}" 
      repoKey = 'libs-release' 
      username = "${project.getProperty('artifactory.resolve.username')}" 
      password = "${project.getProperty('artifactory.resolve.password')}" 
      maven = true 

     } 
    } 
} 

你将不得不更新本地~/.gradle/gradle.properties相应

artifactory.publish.contextUrl=<artifactory-url> 
artifactory.publish.username=<username> 
artifactory.publish.password=<password> 
artifactory.resolve.contextUrl=<artifactory-url> 
artifactory.resolve.username=<username> 
artifactory.resolve.password=<password> 
+0

伟大的信息和观察...不幸的是,它不能在詹金斯工作。你提到的buildinfo文件包含artifactory的_output_“buildinfo”任务,然后将其上传到artifactory。这些属性名称在构建任务期间似乎不可用,但仍不确定它们在何处或如何被注入。进一步的研究代码完成后,在构建脚本中查看https://github.com/JFrogDev/build-info,https://github.com/JFrogDev/jenkins-artifactory-plugin和printlns。现在,手动设置'〜jenkins/.gradle/gradle.properties'的解决方法可以正常工作。 – derekv

+1

对我最后一条评论的修正,buildInfo会做_read in_属性。实际上,你可以简单地在build.info中为'publish'和'resolve'指定'username'和'password',并且像你提到的那样设置'gradle.properties',这是可行的。剩下的唯一东西就是buildscript部分的插件repo,并且在当前的实现中似乎有一个catch22,这些属性由buildInfo插件设置,但是需要属性才能加载buildinfo插件。 – derekv

0

我也敲我的头靠在这一个墙......我尝试了所有的组合,自己和这似乎是唯一一个要运行的是将gradle.properties添加到jenkins服务器。

最后,我最终没有使用jenkins的artifactory gradle插件alltogether.R ather将它添加到build.gradle,并简单地从Jenkins Server gradle插件调用artifactoryPublish。

相关问题