Подтвердить что ты не робот

Как развернуть мой распылитель API в производство?

Я думаю о том, как должен быть процесс развертывания моего уже локально протестированного остального api для облака, можно сказать, что инфраструктура как служба (а не платформа как служба, такая как Heroku), как amazon.

У меня есть локальная среда с настройкой sbt и запущена, но мой вопрос: как мне развернуть это в рабочей среде?

Правильно ли определить процесс, в котором devops вытаскивает последние изменения из репозитория git, а затем просто запускает sbt run?

Я хочу знать, как команды, использующие scala + spray + sbt, развертывают свой apis в рабочей среде.

4b9b3361

Ответ 1

Сердце наших услуг - scala + akka + spray + mongo. Поэтому мы используем GitHub для контроля версий. После слияния проверочных PR с главной веткой Jenkins automaticaly tests'n'builds project. Если все тесты были успешными, то Jenking запускает несколько скриптов:

  • Увеличить версию проекта (в настоящее время написана в оболочке, но будет изменена на sbt)
  • Запустить задачу сборки с sbt-assembly
  • Запустить развернуть script (написанный на Python с Fabric), который развертывает нашу банку в EC2

Основываясь на шаге, у вас есть несколько вариантов:

Сделать исполняемую банку с помощью загрузочного файла IO/Spray:

object Boot extends App {
  implicit val system = ActorSystem("ServiceName")
  val log = system.log
  val service = system.actorOf(Props[Service], name="serviceActor")
  IO(Http) ! Http.Bind(service, interface = host, port = port)
}

Сделайте runnable jar как микроядро Akka:

В этом случае вы должны расширить атрибуты Bootable и переопределить методы startup и shutdown:

class Kernel extends Bootable {
  // many lines of code
  def startup() {
    scheduler.start()
    SomeActorSystem.startup()
  }

  def shutdown() {
    scheduler.shutdown()
    SomeActorSystem.shutdown()
    system.shutdown()
  }
}

Использование дескриптора TypeSafe:

Невозможно показать пример, но он имеет хорошее введение в github =)

Мы используем все это в разных случаях.

Ответ 2

Вы должны создать банку с плагином sbt-assembly

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.0")

Затем вы можете запустить банку в производстве с помощью java -jar

Если вы укажете номер версии для своего проекта, это довольно классический процесс.

Надеюсь, что это поможет.

Ответ 3

Никогда не ездил в PRO с аэрозолем. Только любимые проекты. Мои предложения здесь следует воспринимать как вдохновение. Я знаю, что некоторые из представленных мной вариантов являются дорогостоящими с точки зрения обслуживания или склонны к ошибкам.

Упаковка

Я использовал только maven-shade-plugin (без опыта работы с sbt), но я думаю, есть аналогичное решение.

Проблемы с упаковкой

Тем не менее, есть несколько проблем с этим подходом. Akka и многие из распылительных модулей используют соглашения reference.conf и application.conf. При сборке/затенении всех ваших зависимостей ресурсы (так как они называются одинаковыми) могут перезаписываться, и вы не сможете запустить приложение.

Быстрое и грязное решение, которое я нашел, заключалось в том, чтобы скопировать/вставить приложение и ref.conf зависимостей в управляемый мной.