docker - Jenkins 2.0 : Running SBT in a docker con

我有以下 Jenkinsfile :

def notifySlack = { String color, String message ->
    slackSend(color: color, message: "${message}: Job ${env.JOB_NAME} [${env.BUILD_NUMBER}] (${env.BUILD_URL})")
}

node {
    try {
        notifySlack('#FFFF00', 'STARTED')
        stage('Checkout project') {
            checkout scm
        }
        scalaImage = docker.image('<myNexus>/centos-sbt:2.11.8')
        stage('Test project') {
            docker.withRegistry('<myNexus>', 'jenkins-nexus') {
                scalaImage.inside('-v /var/lib/jenkins/.ivy2:/root/.ivy2') { c ->
                    sh 'sbt clean test'
                }
            }
        }
        if (env.BRANCH_NAME == 'master') {
            stage('Release new version') {
                docker.withRegistry('<myNexus>', 'jenkins-nexus') {
                    scalaImage.inside('-v /var/lib/jenkins/.ivy2:/root/.ivy2') { c ->
                        sh 'sbt release'
                    }
                }
            }
        }
        notifySlack('#00FF00', 'SUCCESSFUL')
    } catch (e) {
        currentBuild.result = "FAILED"
        notifySlack('#FF0000', 'FAILED')
        throw e
    }

}

不幸的是,当我到达 sbt clean test我最终得到以下错误:

java.lang.IllegalArgumentException: URI has a query component
    at java.io.File.<init>(File.java:427)
    at sbt.IO$.uriToFile(IO.scala:160)
    at sbt.IO$.toFile(IO.scala:135)
    at sbt.Classpaths$.sbt$Classpaths$$bootRepository(Defaults.scala:1942)
    at sbt.Classpaths$$anonfun$appRepositories$1.apply(Defaults.scala:1912)
    at sbt.Classpaths$$anonfun$appRepositories$1.apply(Defaults.scala:1912)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:34)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at sbt.Classpaths$.appRepositories(Defaults.scala:1912)
    at sbt.Classpaths$$anonfun$58.apply(Defaults.scala:1193)
    at sbt.Classpaths$$anonfun$58.apply(Defaults.scala:1190)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.EvaluateSettings$MixedNode.evaluate0(INode.scala:175)
    at sbt.EvaluateSettings$INode.evaluate(INode.scala:135)
    at sbt.EvaluateSettings$$anonfun$sbt$EvaluateSettings$$submitEvaluate$1.apply$mcV$sp(INode.scala:69)
    at sbt.EvaluateSettings.sbt$EvaluateSettings$$run0(INode.scala:78)
    at sbt.EvaluateSettings$$anon$3.run(INode.scala:74)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

如果我运行简单的 docker run ...紧随其后的是 docker exec我得到了我想要的,但我想使用定义的 Jenkins 功能。

所以这似乎是一个 SBT 问题。我在 docker 镜像中使用 0.13.16 版本。据我了解,类路径包含 SBT 的查询参数:

  • 不喜欢
  • 不知道怎么处理
  • 不合法

我自己没有设置这样的查询参数,所以我认为 .inside方法做到了。我查了env在容器中找到一个条目 RUN_CHANGES_DISPLAY_URL=<my_ip>/job/scheduler/job/fix-jenkins-pipeline/23/display/redirect?page=changes .我试过 unset它,但没有设法。

我没有想法,也不确定我的方向是否正确。任何帮助将不胜感激。

最佳答案

因此,经过漫长而乏味的搜索,最终对我有用的是在 docker 容器中明确设置 .sbt.ivy2 文件夹:

sbt -Dsbt.global.base=.sbt -Dsbt.boot.directory=.sbt -Dsbt.ivy.home=.ivy2 clean test

这以某种方式阻止了 sbt 生成 ? 文件夹并直接将上述文件夹放在目录结帐的根目录中。

关于docker - Jenkins 2.0 : Running SBT in a docker container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47327495/

相关文章:

linux - nginx/apache重定向vps上docker容器上的输出端口

docker - 对 docker 的 -i "Keep STDIN open even if no

android - 如何以编程方式关闭/隐藏 Android 软键盘?

android - 如何使用保存实例状态保存 Activity 状态?

android - 为什么安卓模拟器这么慢?我们如何加快Android模拟器的速度?

android - 如何在 TextView 中水平和垂直居中文本?

android - 当 Activity 在 Android 中启动时,如何阻止 EditText

networking - 如何将 Docker 网络暴露给主机?

docker - Dockerfile 中的开发依赖项或用于生产和测试的单独 Dockerfile

android - 是否有唯一的 Android 设备 ID?