使用sbt 0.11.3通过git在cloudbees上部署scala/lift应用程序



我开始使用一个在cloudbees上用scala编写的小型应用程序。目前还没有涉及scala,我只想在lift模板的静态文件夹中部署一个网站。我用sbt在cloudbees上创建了一个构建作业,但它给出了以下错误:

[error] {file:/scratch/jenkins/workspace/igem%20sbt/project/}default-81f689/*:update: 
sbt.ResolveException: unresolved dependency: com.github.siasia#xsbt-web-plugin_2.9.1;0.12.0-0.2.11.1: not found

我可以通过sbt->包在本地机器上编译该应用程序(也可以从git获取),并通过"bees-app:deploy"将其部署到cloudbees。这些文件也可以从git在工作区中获得。

我在本地机器上使用sbt1.12,在cloudbees上使用0.11.3(/opt/sbt/sbt-launch-0.11.3-2.jar)。这是因为我不知道如何找出cloudbees的最新版本,也不知道如何在cloudbeees上使用我自己的sbt。我也不知道我必须编辑哪些配置文件才能调整为0.11.3,或者这到底是不是错误。如果我必须改变这一点,我还需要知道如何在我的本地机器上降级(OS X->使用自制软件)。

以下是完整的错误和我的build.sbt:http://pastebin.com/bwAu1hGr

SBT在插件版本方面相当脆弱。每个SBT版本都需要发布一个单独的插件jar,类似于Scala的交叉构建。如果你使用不同版本的SBT在不同的环境中构建,这意味着你要么需要

  • 只使用为您将要使用的每个SBT版本发布的插件版本,或者
  • 根据使用中的sbt版本,在plugins.sbt文件中动态选择正确的插件版本

就我个人而言,我只想为您的项目标准化一个特定的SBT版本,并将SBT-launch.jar文件和引用它的脚本一起添加到您的项目中。我对Cloudbees没有做太多工作,但使用Jenkins,您可以配置一个SBT启动器,其值为:${WORKSPACE}/SBT-lanch.jar。这假设SBT-launch.jar位于git repo的根目录中。

使用sbt插件在CloudBees上使用任意版本的sbt(相当)容易:

  1. 转到管理Jenkins
  2. 在sbt插件部分添加一个名为"项目特定sbt"的新sbt版本,路径为"sbt-launch.jar";这个路径将是相对于你的项目的工作区根目录的,可以是你想要的任何路径——我有一个play2项目,所以我实际上使用了"project/sbt launch.jar">
  3. 将sbt-launch.jar的副本放入项目中,以与#3中的路径对齐
  4. 重新配置您的项目构建作业,以使用sbt插件下拉列表中的"特定于项目的sbt">
  5. 推送您的更改

这本质上是Dave Whittaker方法的改进,但纠正了使用${WORKSPACE}/sbt-launch.jar不起作用的问题,因为${WORKSPACE}没有被Jenkins取代。

关键的变化是定义sbt-launch.jar到项目工作空间的相对路径,因为Jenkins从作业工作空间的根执行构建。

附言:谢谢,@dave whittaker!我用你的答案来解决我自己的构建问题。

如果你不想使用内置的SBT,你不必使用它——你可以使用一个使用shell的构建步骤,如果它还没有缓存在你的工作区中,则下载所需的版本,并使用它。

使用类似的东西

if [ ! -e $sbt ]
then
wget $sbt_url 
#install it
fi

非常不方便。现在有两个解决办法。我成功地尝试了第一个。

在插件中选择正确的sbt版本。sbt

基于http://repo1.maven.org/maven2/com/github/siasia/我找出了每个sbt版本的正确依赖关系。因此,现在我可以在本地机器上使用相同的文件运行0.12.1,在cloudbees上运行0.11.3。我希望其他版本也是正确的。我认为如果我将scala版本从2.9.1更改为2.9.2,它可能会再次引起麻烦,因为那时你需要0.12。*

以下是我的项目/plugin.sbt看起来像

libraryDependencies <+= sbtVersion(v => v match {
case "0.11.0" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.0-0.2.8"
case "0.11.1" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.1-0.2.10"
case "0.11.2" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.2-0.2.10"
case "0.11.3" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.3-0.2.11.1"
case "0.12.0" => "com.github.siasia" %% "xsbt-web-plugin" % "0.12.0-0.2.11.1"
case "0.12.1" => "com.github.siasia" %% "xsbt-web-plugin" % "0.12.0-0.2.11.1"
})

将最新的SBT插件上传到cloudbees

你也可以通过WebDav上传文件到私人文件夹(我认为只有这样):

https://repository-{account-id}.forge.cloudbees.com/private/ 

通过这种方式,你可以上传sbt-launch-0.12.jar

https://github.com/lift/lift_25_sbt/tree/master/scala_29/lift_basic 

这一点我还没有测试:现在你应该在cloudbees中配置sbt。所以登录并:

Builds->Manage Jenkins->Configure System

并在sbt部分添加/private/{account id}/{sbt启动您的版本}.jar。

CloudBees使您可以轻松地将自己的工具放在构建服务器上,即使您不能直接对它们进行ssh。您可以使用WebDav将可执行文件上载到安装在每个构建计算机上的专用存储库中。您可以使用它上传SBT的新版本,然后从Jenkins SBT插件中引用它。

有关设置WebDav连接的更多详细信息,请参阅本页的"专用存储库"部分:http://wiki.cloudbees.com/bin/view/DEV/Custom+构建+工具

最新更新