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

时间:2012-11-27 18:29:12

标签: git scala sbt lift cloudbees

我开始使用scala编写的小应用程序,并在cloudbees上提升。目前没有涉及scala,我只想在电梯模板的静态文件夹中部署一个网站。我使用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的工作区中找到。

我在本地计算机上使用sbt 0.12,在cloudbees上使用0.11.3(/opt/sbt/sbt-launch-0.11.3-2.jar)。那是因为我不知道如何找出哪个是关于cloudbees的最新版本,或者我如何在cloudbees上使用我自己的jar版本。我也不知道我需要编辑哪些配置文件来调整0.11.3,或者这毕竟是错误。如果我必须改变它,我还需要知道如何在我的本地机器上降级(OS X - >使用自制软件)。

这里是完整的错误,我的build.sbt:http://pastebin.com/bwAu1hGr

5 个答案:

答案 0 :(得分:2)

对于插件版本,SBT非常脆弱。每个插件都需要为每个SBT版本发布一个单独的jar,类似于Scala cross building。如果您使用不同版本的SBT在不同环境中构建,则意味着您需要

  • 仅使用针对您将使用的每个SBT版本或
  • 发布的插件版本
  • 根据正在使用的SBT版本,在plugins.sbt文件中动态选择正确的插件版本。

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

答案 1 :(得分:1)

使用sbt-plugin在CloudBees上使用任意版本的sbt非常简单:

  1. 去管理Jenkins
  2. 在sbt-plugin部分添加一个名为'project-specific sbt'的新sbt版本,其路径为'sbt-launch.jar';这条路径将相对于项目的工作区根目录,可以是你想要的任何东西 - 我有一个play2项目,所以我实际上使用'project / sbt-launch.jar'
  3. 将sbt-launch.jar的副本放入项目中以与#3中的路径对齐
  4. 重新配置项目构建作业以使用sbt-plugin下拉列表中的“项目特定sbt”
  5. 推送您的更改
  6. 这实质上是对Dave Whittaker方法的改进,但纠正了使用$ {WORKSPACE} /sbt-launch.jar的问题不起作用,因为$ {WORKSPACE}没有被Jenkins取代。

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

    P.S。谢谢,@ dave-whittaker!我用你的答案来解决我自己的构建问题。

答案 2 :(得分:0)

如果您不想使用内置SBT,则不必使用 - 您可以使用使用shell的构建步骤,并下载所需的版本(如果尚未在工作区中缓存)并使用那个。

使用类似的东西:

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

答案 3 :(得分:0)

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

在plugin.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。*

这是我的project / 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将文件上传到privat文件夹(我认为只是这样):

  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-launch-your-version}.jar。

答案 4 :(得分:0)

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

有关设置WebDav连接的详细信息,请参阅本页的“私有存储库”部分:http://wiki.cloudbees.com/bin/view/DEV/Custom+Build+Tools