如何使用 sbt 发布到 Amazon S3

问题描述 投票:0回答:5

正如此处所解释的那样,可以使用 maven 部署到 Amazon S3。

如何对sbt做同样的事情,即用sbt发布到S3?

amazon-web-services amazon-s3 sbt ivy
5个回答
25
投票

这是我编写的用于发布到 Amazon S3 的 SBT 插件:https://github.com/frugalmechanic/fm-sbt-s3-resolver

它与已经提到的 sbt-s3-resolver 类似,但已获得 Apache 2.0 许可(而不是 AGPL),并且可在 Maven Central 上使用。 使用和配置也更容易一些。

发布到S3

publishTo := Some("S3" at "s3://s3-us-west-2.amazonaws.com/YOUR_BUCKET/repo")

从S3解析

resolvers += "S3" at "s3://s3-us-west-2.amazonaws.com/YOUR_BUCKET/repo"

启用插件

只需将其添加到您的project/plugins.sbt 文件中即可:

addSbtPlugin("com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.23.0")

配置 AWS 凭证

配置 AWS 凭证的方法有多种,这些方法记录在 GitHub 页面上。

一种方法是创建一个 ~/.sbt/.s3credentials,如下所示:

accessKey = XXXXXXXXXX
secretKey = XXXXXXXXXX

插件将自动获取凭据文件,您将能够解析并发布。


6
投票

这个问题很老了,所以可能你已经找到了一些解决方法,但这个答案可能对其他人有用。

我们的团队也遇到了这样的问题,我们刚刚为此创建了一个 sbt 插件:sbt-s3-resolver。我们已经使用它一段时间了,看起来效果很好。可以

  • 将 ivy/maven 工件发布到 S3(私有/公共)存储桶
  • 解析来自 private 存储桶的 ivy 工件(因为从公共存储桶中,您可以使用标准 sbt 解析器进行解析)

查看自述文件中的使用说明,如果缺少某些内容,请提出问题。


4
投票

我能够使用 sbt-s3 插件让它工作

https://github.com/sbt/sbt-s3

这是一个例子:

import sbt._
import Keys._
import play.Project._

import com.typesafe.sbt.S3Plugin._
import S3._
import sbtassembly.Plugin.AssemblyKeys
import sbtassembly.Plugin.AssemblyKeys._
import sbtassembly.Plugin.assemblySettings
import sbtassembly.Plugin.MergeStrategy
import sbtbuildinfo.Plugin._

object ApplicationBuild extends Build {

  val appName = "og-ws"
  val appVersion = "1.0-SNAPSHOT"

  val appDependencies = Seq(
    // Add your project dependencies here,
    jdbc,
    anorm,
    "com.netflix.astyanax" % "astyanax-cassandra" % "1.56.28",
    "com.netflix.astyanax" % "astyanax-thrift" % "1.56.28",
    "com.netflix.astyanax" % "astyanax-entity-mapper" % "1.56.28")

  val main = (
    play.Project(appName, appVersion, appDependencies)
    settings (s3Settings: _*)
    settings (assemblySettings: _*)
    settings (
      // call its setters to configure it, see api docs above etc.
      publish := (),
      publishLocal := (),
      mappings in upload <<= dist map { distFile =>
        Seq(distFile -> "snapshot/%s/%s/%s-%s.zip".format(appName, appVersion, appName, appVersion))
      },
      host in upload := "plaor.maven.s3.amazonaws.com",
      credentials += Credentials(Path.userHome / ".s3credentials")))
}

2
投票

我还没有尝试过这个,但是通过查看 api 文档,这可能会起作用:

  1. 获取 http://www.jarvana.com/jarvana/view/org/springframework/aws/spring-aws-ivy/1.0/spring-aws-ivy-1.0-javadoc.jar!/org/springframework/aws/ ivy/S3Resolver.html(请参阅 http://repo1.maven.org/maven2/org/springframework/aws/spring-aws-ivy/1.0/ --- 您应该能够在
    project/lib/ 下载 jar 
    ,或将
    "org.springframework.aws" % "spring-aws-ivy" % "1.0"
    放入
    project/build.sbt
    )。
  2. 将其添加到您的 build.sbt 中:

    {
      val s3r = new org.springframework.aws.ivy.S3Resolver
      // call its setters to configure it, see api docs above etc.
      publishTo := Some(new sbt.RawRepository(s3r)
    }
    

再说一次,我没有尝试过这个,但由于

publishTo
是一个
SettingKey[Option[Resolver]]
,并且
RawRepository
扩展了
Resolver
并接受了
org.apache.ivy.plugins.resolver.DependencyResolver
,并且
S3Resolver
实现了
DependencyResolver
,我猜它会起作用的。

毕竟,sbt 实际上只是 Apache Ivy 的包装。


0
投票

我也必须从我们的构建工具将程序集 jar 上传到 s3 存储桶。 @dres 的回答帮助我走向正确的方向。

我在

build.sbt
文件中使用了以下内容。

如您所见,这里我使用了

sbt-assemble
中提供的 SettingKey[String]

// s3Upload
import S3._

s3Settings
mappings in upload := Seq(
  (assemblyOutputPath in assembly).value -> 
       s"${name.value}/${version.value}/${(assemblyJarName in assembly).value}"
)

host in upload := "my-bucket.s3.amazonaws.com"

S3.progress in S3.upload := true
  • assemblyOutputPath in assembly
    为您提供程序集 jar 文件的完整输出路径
  • assemblyJarName in assembly
    为您提供由程序集生成的 jar 名称。
  • 您需要调用
    .value
    从SBT密钥获取实际值

这将使用命令

my-bucket
将程序集 jar 上传到
name/version/name-assembly-version.jar
下的
sbt s3Upload

请注意,我还在环境中设置了

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
。可以在此处找到查找凭证的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.