【问题标题】:sbt dist works in terminal but not with Jenkins as shell scriptsbt dist 在终端中工作,但不适用于 Jenkins 作为 shell 脚本
【发布时间】:2018-05-27 07:46:23
【问题描述】:

我对 sbt 和 Jenkins 都是全新的。我正在尝试使用 Jenkins 管道构建构建计划。以下命令在 shell 脚本中运行良好:sbt compile & sbt package

但是,sbt dist 不起作用。我收到错误not a valid command

让我困惑的是,我可以从终端运行命令就好了。

对于它的工作原理,这里是 jenkinsfile 的内容(我知道 sbt dist 应该在构建中,但我仍在尝试):

pipeline {
  agent any
  stages {
    stage('Build') {
      parallel {
        stage('Build') {
          steps {
            sh 'echo "Compiling... "'
            sh 'sbt compile'
          }
        }
        stage('Deploy') {
          steps {
            sh 'echo "Deploying... "'
            sh 'echo "packaging.. "'
            sh 'sbt dist'
          }
        }
      }
    }
  }
}

Jenkins 2.89.1,sbt 都尝试了:0.13 和 1.0.x

【问题讨论】:

  • 在裸机 SBT 中没有 dist 任务。所以它只是告诉你它找不到这样的任务。可能您打算使用一些定义 dist 任务的 SBT 插件? SBT 中有一个publish 任务,可能你正在寻找它。
  • @AlexanderArendar 这是否意味着 dist 已安装在机器上但未被 jenkins 使用?是否有任何与dist 相同的 sbt 任务(生成 zip 文件)?
  • 据我所知,在 SBT 中没有任何东西叫 dist。知道为什么你决定在那里应该有一个dist 任务会很有帮助。 package 任务生成一个 .jar 文件。试试看github.com/sbt/sbt-native-packager SBT 插件,它可以用来构建.zip 等等。
  • @AlexanderArendar 当我第一次运行sbt dist 时,它会加载一些库/插件,然后从终端运行。我面临的问题,它不适用于 Jenkins whithin shell 脚本。也许是因为该插件没有添加到詹金斯。 native-packager 也是如此。我的目标是从 jenkins 生成 zip 文件。因此,我可能需要一个与 jenkins 兼容的插件来生成 zip。感谢您的意见
  • @AlexanderArendar 这里是dist 的来源:playframework.com/documentation/2.6.x/Deploying

标签: shell jenkins sbt jenkins-pipeline


【解决方案1】:

我现在从 cmets 看到您正在开发 Play 应用程序,所以现在很清楚 dist 任务的来源。

在 Jenkins 中,当您运行 SBT 任务时,您需要做的第一件事就是将您的项目的 build.xml 加载到 SBT。在您的 shell 脚本中,无论您是否在根项目文件夹中,实际上都不可见。

Jenkins 与 SBT 的集成也比通过 shell 脚本运行它更好。您需要先将 this plugin 添加到 Jenkins。查看随附的屏幕截图,其中显示了我的一个 Jenkins 项目的一部分:

Jenkins 中有一种特殊的构建步骤。在您的项目配置中,您应该在“构建步骤”下拉列表下看到它:

我相信你应该从那里开始。如果您仍然需要通过 shell 脚本运行,请确保在运行 SBT 命令之前还cd /path/to/your/project 文件夹。

【讨论】:

  • you have loaded to SBT your build.xml of your project 你能解释更多吗? build.xml 文件是什么?我在哪里可以找到它?
  • 我认为在使用 SBT 之前,您需要阅读更多关于使用 SBT 构建项目的信息。从 SBT 文档开始,它有很好的入门部分:scala-sbt.org/1.x/docs/Getting-Started.html
【解决方案2】:

我接受了@Alexander Arendar 的答案,因为它是正确的答案。我只是想详细说明我是如何做到的,所以它对其他人有用。

@Alexander 提到的答案是If you still need to run through shell script make sure you also cd /path/to/your/project folder before running SBT commands。我实际上是这样做的。但我完全没有注意到,cd 到目录并运行sbt dist 必须在同一个 jenkins 步骤中。我在两个单独的步骤中执行此操作,并最终在原始目录中运行 sbt dist。

值得注意的是,只有sbt dist 需要cd to project,因为它带有Play。标准 sbt 命令(例如:sbt compile)在 play 项目目录之外运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-27
    • 2013-10-05
    • 1970-01-01
    • 2017-04-23
    • 2016-09-15
    • 2013-10-29
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多