0

我开始使用 scala 编写的一个小应用程序,并在 cloudbees 上进行提升。目前没有涉及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->package 在我的本地机器上编译应用程序(也从 git 获取)并通过“bees app:deploy”将其部署到 cloudbees。这些文件也可以从 git 的工作区中获得。

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

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

4

5 回答 5

2

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

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

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

于 2012-11-27T20:45:24.317 回答
1

通过 sbt-plugin 在 CloudBees 上使用任意版本的 sbt 非常容易:

  1. 去管理詹金斯
  2. 在名为 'project-specific sbt' 的 sbt-plugin 部分添加一个新的 sbt 版本,路径为 'sbt-launch.jar';此路径将相对于您项目的工作区根目录,并且可以是您想要的任何路径——我有一个 play2 项目,所以我实际上使用 'project/sbt-launch.jar'
  3. 将 sbt-launch.jar 的副本放入您的项目中以与 #3 中的路径对齐
  4. 重新配置您的项目构建作业以使用 sbt-plugin 下拉列表中的“项目特定 sbt”
  5. 推动你的改变

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

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

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

于 2012-12-31T16:07:08.717 回答
0

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

使用类似的东西:

if [ ! -e $sbt ]
then
    wget $sbt_url 
    #install it
fi
于 2012-11-28T00:14:27.370 回答
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 。

于 2012-11-28T08:01:43.167 回答
0

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

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

于 2013-01-16T02:32:49.683 回答