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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sbt dist在终端中工作但不与Jenkins一起作为shell脚本相关的知识,希望对你有一定的参考价值。

我对sbt和Jenkins都是全新的。我正在尝试使用Jenkins piplelines构建构建计划。以下命令在shell脚本中运行正常:sbt compilesbt 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'
          }
        }
      }
    }
  }
}

詹金斯2.89.1,sbt尝试了两个:0.13和1.0.x

答案

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

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

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

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

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

另一答案

我接受了@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

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

以上是关于sbt dist在终端中工作但不与Jenkins一起作为shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

获取在 HTML 页面中工作但不在 JS 中工作 [重复]

请求在CURL中工作但不在Ajax中工作

查询在 PHPMyAdmin 中工作但在 PHP 中不工作

ApnsPHP:在开发中工作但不在生产中的推送通知

Android Geolocation在模拟器中工作但不在手机中工作

CoreLocation 应用程序在模拟器中工作但不在设备上