CloudBees — это облачная платформа, предоставляющая репозиторий, сервис CI (Jenkins) и сервер для ваших приложений. Итак, все, что вам нужно для разработки, тестирования и развертывания. Есть много вариантов, например, хранилище может быть Git или SVN, для сервера вы можете выбрать Jetty, Tomcat, Glassfish, JBoss, Wildfly и т. Д. Также можно запускать автономные приложения, которые снабжены номером порта, так что вы можете запустить собственный сервер. И это тот случай, который мы рассмотрим здесь.
Spray.io — это фреймворк Scala для веб-приложений. Он позволяет вам создавать автономные веб-приложения (запускающие собственный сервер, спрей-баллончик) или несколько ограниченные .war-приложения (спрей-сервлет), которые вы можете развернуть на сервере JEE, например Glassfish, JBoss и т. Д. Мы собираемся использовать автономный Вот.
Вы можете клонировать приложение из GitHub . Давайте кратко рассмотрим это сейчас.
Приложение
ботинок
Boot
файл — Scala App
, поэтому он похож на класс java с методом main. Это работает. Он создает субъект Service
, который обрабатывает все HTTP-запросы. Он также считывает номер порта из системного свойства app.port
и связывает службу с хостом и портом. app.port
предоставляется CloudBees, если вы хотите запустить приложение локально, вам нужно установить его, например, с помощью командной строки jvm -Dapp.port=8080
.
обслуживание
Service
имеет черту MyService
, которая обрабатывает маршрутизацию только на пустой путь. Да, приложение не очень сложное!
Buildfile
Файл build.gradle
немного интереснее. Давайте начнем с его конца.
-
mainClassName
имеет значение Scala App. Это класс, который будет запускаться, когда вы запускаете его локально из командной строки приgradlew run
. -
applicationDefaultJvmArgs
имеет значение-Dapp.port=8080
и также необходимо для локального запуска из Gradle. Таким образом мы устанавливаем порт, к которому будет привязанService
. -
jar.archiveName
— это параметр, используемый для установки сгенерированного имени .jar. Без этого это зависит от имени каталога проекта.
Вы можете запустить приложение, gradlew run
(убедитесь, что файл gradlew
является исполняемым). Когда он работает, вы можете указать в браузере http: // localhost: 8080, и вы должны увидеть «Скажите привет распылению на аэрозольном баллончике!» Ничего особенного, извини.
Существует также задача «cb», определенная для gradle. Если вы gradlew cb
, он создает zip-файл со всеми зависимостями .jars и szjug-sprayapp-1.0.jar
в своем корне. Этот макет необходим для автономных приложений CloudBees.
Развертывание в CloudBees
Сначала вам нужно создать учетную запись на CloudBees . Если у вас есть, скачайте CloudBees SDK, чтобы вы могли запускать команды из командной строки. На Mac я предпочитаю brew install
, но вы можете выбрать свой путь.
После установки выполните команду bees
. При первом запуске он запрашивает ваш логин / пароль, поэтому вам не нужно указывать его каждый раз, когда вы хотите использовать bees
.
Сборка .zip мы развернем в облаке. Перейдите в каталог приложения ( szjug-sprayapp
) и gradlew cb
команду gradlew cb
. Эта команда не только создает файл .zip, но и печатает список .jars, полезный для передачи команде пчел как classpath.
Разверните приложение, выполнив следующую команду из szjug-sprayapp
:
1
|
bees app:deploy -a spray-can -t java -R class =pl.szjug.sprayapp.Boot -R classpath=spray-can- 1.3 . 1 .jar:spray-routing- 1.3 . 1 .jar:spray-testkit- 1.3 . 1 .jar:akka-actor_2. 10 - 2.3 . 2 .jar:spray-io- 1.3 . 1 .jar:spray-http- 1.3 . 1 .jar:spray-util- 1.3 . 1 .jar:scala-library- 2.10 . 3 .jar:spray-httpx- 1.3 . 1 .jar:shapeless_2. 10 - 1.2 . 4 .jar:akka-testkit_2. 10 - 2.3 . 0 .jar:config- 1.2 . 0 .jar:parboiled-scala_2. 10 - 1.1 . 6 .jar:mimepull- 1.9 . 4 .jar:parboiled-core- 1.1 . 6 .jar:szjug-sprayapp- 1.0 .jar build/distributions/szjug-sprayapp- 1.0 .zip |
А вот сокращенная версия для удобства чтения:
1
|
bees app:deploy -a spray-can -t java -R class =pl.szjug.sprayapp.Boot -R classpath=...:szjug-sprayapp- 1.0 .jar build/distributions/szjug-sprayapp- 1.0 .zip |
spray-can
— это название приложения, -t java
— тип приложения. -R
— свойства CloudBees, такие как класс для запуска и путь к классу для использования. Файлы для classpath печатаются, когда Gradle запускает задачу cb
, поэтому вам просто нужно скопировать и вставить.
Вот и все! Наше приложение работает на сервере CloudBees. Это доступно по URL из консоли CloudBees.
Используйте сервисы CloudBees
Приложение развернуто на CloudBees, но это все? Как я уже упоминал, мы могли бы также использовать git-репозиторий и Jenkins. Давай сделаем это сейчас.
Репозиторий (Git)
Создайте новый git-репозиторий в своей учетной записи CloudBees. Выберите «Repos» слева, «Add Repository»… все это довольно просто.
Назовите это «szjug-app-repo» и помните, что это должен быть Git.
Затем добавьте этот репозиторий как удаленный в локальный репозиторий git. На странице репозиториев в консоли CloudBees есть очень полезная таблица о том, как это сделать.
Сначала добавьте git remote repository. Давайте cb
это cb
1
|
git remote add cb ssh: //[email protected]/pawelstawicki/szjug-app-repo.git |
Затем вставьте туда свои коммиты:
1
|
git push cb master |
Теперь у вас есть код на CloudBees.
CI build server (Дженкинс)
Пришло время настроить сборку приложения на CI-сервере. Перейдите в «Builds». Здесь живет Дженкинс. Создайте новую работу в свободном стиле.
Настройте свой git-репозиторий, чтобы Дженкинс всегда проверял свежую версию кода. Вам понадобится URL хранилища. Вы можете взять его со страницы «Repos».
Установите URL здесь:
Следующее, что нужно настроить — это задача Gradle. Добавьте следующий шаг сборки типа «Invoke gradle script». Выберите «Использовать Gradle Wrapper» — так вы можете использовать версию Gradle, поставляемую с проектом. Установите «cb» в качестве задачи для запуска.
Ну, это все, что вам нужно для создания приложения. Но мы хотим развернуть его, не так ли? Добавьте действие после развертывания «Развернуть приложения». Введите идентификатор приложения (в нашем случае spray-can
баллон, регион должен измениться автоматически). Таким образом, мы говорим Дженкинс, где развернуть. Также необходимо знать, что развертывать. Введите build/distributions/szjug-app-job-*.zip
как «Файл приложения».
Поскольку вы развернули приложение ранее из командной строки, такие параметры, как тип приложения, основной класс, путь к классам и т. Д., Уже есть, и вам не нужно предоставлять его снова.
Также может быть полезно сохранить zip-файл из каждой сборки, чтобы мы могли его заархивировать. Просто добавьте действие «Архивировать артефакты» после сборки и установите тот же zip-файл.
Хорошо, это все для конфигурации сборки на Jenkins. Теперь вы можете нажать на ссылку «Build now», и сборка должна быть добавлена в очередь. Когда он будет завершен, вы увидите журналы, состояние и т. Д. Но, что более важно, приложение должно быть развернуто и доступно для всего мира. Теперь вы можете что-то изменить в нем, нажать «Построить сейчас» и после его завершения проверить, применяются ли изменения.
тесты
Вероятно, вы также заметили, что есть тест прилагается. Вы можете запустить его с gradlew test
. Это тест specs2 , с чертой MyService
поэтому у нас есть доступ к myRoute
и Specs2RouteTest
так что у нас есть доступ к средствам тестирования spray.io.
@RunWith(classOf[JUnitRunner])
необходим для запуска тестов в Gradle.
Теперь, когда у нас есть тесты, мы хотели бы увидеть результаты тестов. Это еще один шаг после сборки в Jenkins. Нажмите «Добавить действие после сборки» -> «Опубликовать отчет о результатах теста JUnit».
Gradle не помещает результаты тестов там, где работает maven, поэтому вам нужно указать расположение файлов отчетов.
Когда это будет сделано, следующая сборка должна показать результаты теста.
Триггерная сборка
Теперь у вас есть работа по сборке, позволяющая создавать, тестировать и развертывать приложение. Тем не менее, эта сборка будет работать только тогда, когда вы запустите ее вручную. Давайте запускать его каждый день, а после каждого изменения отправлять в хранилище.
Резюме
Итак, теперь у вас есть все необходимое для разработки приложения. Git-репозиторий, система непрерывной интеграции и инфраструктура для развертывания приложения (на самом деле, также постоянно).
Подумайте о своем собственном приложении, и … счастливы!
Ссылка: | Разрабатывайте, тестируйте и развертывайте автономные приложения на CloudBees от нашего партнера JCG Павла Ставицкого в блоге Java, Programming and Everything . |