Как опубликовать на Amazon S3 с sbt - программирование
Подтвердить что ты не робот

Как опубликовать на Amazon S3 с sbt

Как здесь объясняется, можно установить на Amazon S3 с maven.

Как мы можем сделать то же самое с sbt, то есть публиковать на S3 с помощью sbt?

4b9b3361

Ответ 1

Вот плагин SBT, который я написал для публикации в Amazon S3: 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"

Включить плагин

Просто добавьте это в файл вашего проекта /plugins.sbt:

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

Настройка учетных данных AWS

Существует несколько способов настройки учетных данных AWS, которые описаны на странице GitHub.

Одним из методов является создание ~/.sbt/.s3credentials, которое выглядит следующим образом:

accessKey = XXXXXXXXXX
secretKey = XXXXXXXXXX

Файл учетных данных будет автоматически подобран плагином, и вы сможете разрешить и опубликовать его.

Ответ 2

Вопрос довольно старый, так что, возможно, вы уже нашли некоторое обходное решение, но может быть, этот ответ будет полезен кому-то другому.

У нас также была такая проблема в нашей команде, и мы просто создали для этого sbt-plugin: sbt-s3-resolver. Мы использовали его некоторое время, и, похоже, он работает нормально. Он может

  • публикует артефакты ivy/maven для S3 (private/public) ведра
  • разрешить артефакты плюща из частных ведер (потому что из общедоступных ведер вы можете распознавать со стандартными sbt-резольверами)

Взгляните на инструкции по использованию в readme и откройте проблему, если что-то не хватает.

Ответ 3

Мне удалось заставить это работать, используя плагин 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")))
}

Ответ 4

Я не пробовал это, но, глядя на api docs, это может сработать:

Опять же, я не пробовал это, но поскольку publishTo - это SettingKey[Option[Resolver]], а RawRepository extends Resolver и принимает org.apache.ivy.plugins.resolver.DependencyResolver, а S3Resolver реализует DependencyResolver, я предположив, что это сработает.

В конце концов, sbt действительно просто обертка вокруг Apache Ivy.

Ответ 5

Мне тоже пришлось загружать сборку jar в ведро s3 из нашего инструмента сборки. Ответ @dres помог мне пойти в правильном направлении.

Я получил его работу со следующим в build.sbt файле.

Как вы можете видеть, здесь я использовал значения SettingKey[String], доступные в sbt-assembly

// 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 дает имя баннера, созданное сборкой.
  • вам нужно вызвать .value, чтобы получить фактическое значение из клавиш SBT

Загружает сборку в my-bucket в name/version/name-assembly-version.jar с помощью команды sbt s3Upload.

Обратите внимание, что я также установил мои AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY в среде. Порядок поиска учетных данных можно найти здесь.

Ответ 6

Я использовал уже упомянутые два плагина (https://github.com/ohnosequences/sbt-s3-resolver и https://github.com/frugalmechanic/fm-sbt-s3-resolver), но в итоге я написал свой собственный:

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

Здесь выборка функций, которые уникальны и/или уже упомянуты другими ответами:

  • Опубликовать листинг каталога в стиле Apache, если вы хотите публиковать общедоступные артефакты с помощью функции хостинга веб-сайтов S3.
  • По умолчанию DefaultAWSCredentialsProviderChain, но предоставляет параметр, если вы хотите настроить своего провайдера
  • Публиковать путь в ведре (например, s3://munchii.com/snapshots)
  • Поддерживает динамические версии (например, 1.0. +)
  • Лицензия на Apache 2.0