在docker容器

时间:2017-03-20 12:15:09

标签: java maven docker jenkins artifactory

我正在使用Jenkins和Jenkins文件,它在docker容器中运行我的构建。我有一个简单的Java应用程序,我想使用Jenkins Artifactory插件构建和部署到artifactory。

我的Jenkins文件位于 -

之下
node {
  def server = Artifactory.server "my-artifactory"
  def rtMaven = Artifactory.newMavenBuild()

  stage("Prepare environment"){
    docker.image('driv/docker-maven-java-oracle').inside {

      checkout scm

      stage("Artifactory configuration") {
        rtMaven.deployer releaseRepo:'libs-release-local', snapshotRepo:'libs-snapshot-local', server: server
        rtMaven.resolver releaseRepo:'libs-release', snapshotRepo:'libs-snapshot', server: server
      }

      stage("Maven build") {
        def buildInfo = rtMaven.run pom: 'pom.xml', goals: 'clean install'
      }
    }
  }
}

但是,当我使用上面的Jenkinsfile运行构建时,我收到错误 -

java.lang.RuntimeException: Couldn't find maven installation

我知道我可以在我的Jenkins文件中添加一行 -

rtMaven.tool = MAVEN_TOOL

...我可以用来指定一个预配置的Jenkins工具来指向Maven的Artifactory插件。但是,在我看来,这样一个预配置的工具必须在Jenkins机器或构建节点上,而不是在我的docker容器内。

那么,是否可以将Artifactory插件指向我的docker容器内的maven安装?

感谢。

1 个答案:

答案 0 :(得分:0)

这可能应该在其jenkins插件本身中解决,但由于“ Christopher Orr”建议在管道阶段将环境变量映射到容器工作中设置的相同变量

例如

stage('mystage') {
    environment {
        // If your using the official maven image, these are probably where it puts it
        MAVEN_HOME = '/usr/share/maven'
        JAVA_HOME= '/usr/local/openjdk-8'
    }
    steps {
        sh """
            # confirm location of MAVEN_HOME and JAVA_HOME in container and set in environment directive
            printenv 
        """
        ...
        // call rtMavenRun()