sbt dist在终端中工作但不与Jenkins一起作为shell脚本

时间:2017-12-13 12:10:34

标签: shell jenkins sbt jenkins-pipeline

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

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

令我困惑的是,我可以从终端运行命令就好了。 enter image description here

对于它的工作原理,这里是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

2 个答案:

答案 0 :(得分:1)

我现在从评论中看到您正在使用Play应用程序,因此现在很清楚dist任务的来源。

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

Jenkins也更好地与SBT集成,然后通过shell脚本运行它。您需要先向Jenkins添加this plugin。查看附带的屏幕截图,其中显示了我的一个Jenkins项目的一部分: enter image description here

詹金斯有一种特殊的构建步骤。在项目配置中,您应该在“构建步骤”下拉列表中看到它: enter image description here

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

答案 1 :(得分:0)

我接受了@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项目目录外运行正常。