В продолжение предыдущей статьи про развертывание Ratpack приложения на Heroku, сегодня я расскажу про использования плагина Gradle. Это был трудный опыт по развертыванию простого Ratpack приложения на Heroku PaaS. Мы рылись в хитросплетениях buildpack's для развертывания на Heroku.Хорошие новости в том, что это бельше не обязательно.
В этой статье я покажу более простой способ развертывания. В этом методе не необходимости явно использовать Heroku Toolbelt и custom'ые buildpack's. Так же больше не нужно иметь Ruby, RVM, или множество других связанных с Ruby технологий, которые не нужны Java/Groovy разработчикам, им даже знать об этот нет необходимости.
Все это благодаря превосходному Java API, которое Heroku сделало доступным для использованя для нас. Это простая Java библиотека, которая позволяет нам взаимодействовать напрямую с Heroku. Добавлена возможность работы с Git репозиториями, через библиотеку JGit, предоставленную Eclipse Foundation, и у нас есть все, что нам нужно для развертывания нашего приложения из директории с нашим проектом. Преимущество в том, что все это обернуто в Gradle плагин, который управляет всем от вашего имени.
По факту все, что нам нужно это установленный JDK, с переменными окружения в PATH, установленный Gradle и хороший текстовый редактор. Ну что ж, приступим:
Конфигурация
Прежде всего, нам нужно сконфигурировать файл нашего проекта build.gradle следующим образом:
buildscript {
repositories {
...
mavenCentral()
maven { url 'http://dl.bintray.com/vermeulen-mp/gradle-plugins' }
}
dependencies {
classpath "org.gradle.api.plugins:gradle-heroku:0.9.6"
}
}
apply plugin: 'heroku'
...
heroku {
//get this from heroku
apiKey = 'my-api-key'
//set this on first run if you don't want a generated name
//appName = 'some-unique-app-name'
//set this if you are not happy with the default gradlew buildpack
//buildpack = 'http://somebuildpack
}
Это настройка нашего build'а для использования heroku плагина. Обратите внимание на блок кода heroku, там описана конфигурация плагина. Единственное обязательное поле здесь это apiKey. Поле appName не является обязательным для первого запуска, но должно быть указано для последующих запусков. Если это поле не указать, то Heroku сгенерирует название приложения от вашего имени и будет связывать ваш локальный git репозиторий c экзепляром приложения на Heroku. Если вам не нравятся сгенерированные имена, вы можете назвать ваше приложение явно при первом запуске.
Стоит также отметить, что apiKey может быть извлечен из файла свойств для решения проблем с безопасностью.
Далее нам нужно добавить Procfile в корневую папку нашего проекта. Это маленький файл ответственный за начальную загрузку приложения, когда оно будет развернуто. Существенной чертой здесь является то, что команды начинаются с web:. Это будет зависеть от того, какое приложение вы пытаетесь развернуть.
Fat Jar apps (Spring Boot and DropWizard)
Создаем Procfile в корневой папке нашего проекта, добавляем следующее содержимое:
---
default_process_types:
web: java -jar -Dport=$PORT build/libs/my-springboot-fat.jar
Запуск этой команды для Spring Boot или Dropwizard приложения, используя fat.jar, достаточен, чтобы запустить приложени.
Ratpack
Развертывание Ratpack приложения почти такое же простое, но требует немного более тонкой настройки. Во-первых, вам нужны root права на корневую директорию проекта, которую Gradle использует для именования в скрипте запуска. Это можно сделать добавив файл settings.gradle в корневую папку вашего проекта.
Содержимое файла settings.gradle:
rootProject.name = 'ratpack'
Далее мы добавляем наш Procfile:
---
default_process_types:
web: export RATPACK_OPTS="-Dratpack.port=$PORT" && build/install/ratpack/bin/ratpack build/install/ratpack/ratpack.groovy
Buildpacks
Если вы не указывали buildpack в блоке кода heroku в вашем файле build.gradle, то плагин выберет default buildpack. Этот buildpack будет использоваться gradle wrapper'ом в вашем проекте, для подготовки вашего приложения к развертыванию. Он делает самый минимум, просто выполняет команду gradlew в каталоге проекта. Так же он требует, чтобы defaultTasks устанавливались в пределах вашего build файла.
Default Tasks
Для того, чтобы default buildpack знал, какие задачи запускать, мы должны указать список задач в файле build.gradle. Например, чтобы подготовить Ratpack приложение для развертования, вы должны добавить следующие задачи:
defaultTasks "clean", "build", "installApp"
Принять JDK!
Default buildpack позволяет нам даже выбирать какую JDK использовать в runtime. Просто поместите файл system.properties в базовую папку проекта со следующим содержанием:
java.runtime.version=1.7
Если файл system.properties не присутствует в вашем проекте, то buildpack предполагает JDK 1.8 от вашего имени.
Приступить к запуску!
До сих пор все было для конфигурации, теперь запустим наше приложение. Откроем терминал и введем следующие команды:
$ gradle tasks
...
herokuAppCreate - Creates a new application on Heroku.
herokuAppDeploy - Deploy the application to Heroku.
herokuAppDestroy - Destroy the application on Heroku.
herokuAppInfo - Displays comprehensive information about the named application.
herokuAppList - Lists all Apps available for the current user on Heroku.
herokuBuildpack - Downloads and explodes the specified buildpack to this project.
...
Теперь мы знаем, что можем приступить к развертыванию. Начнем с того, что добавим wrapper в наш git:
$ ./gradlew wrapper
$ git add gradlew gradle
$ git commit -m 'Add wrapper.'
Далее создадим приложение на Heroku и развернем его:
$ ./gradlew herokuCreateApp
$ ./gradlew herokuDeployApp
Если все хорошо, то теперь у вас должно быть развернутое приложение на Heroku.
Исходники gradle плагина и default builpack вы можете найти на GitHub'е.
На этом все!
Мы увидели как просто получить развернутое на Heroku приложение, использую Gradle проект. Все что нам нужно это apiKey и несколько очень простых настроек, чтобы получить наше приложение, поющее сладко в облаках. Развертывание приложение на Heroku еше никогда не было таким простым! Оригинал статьи находится здесь. Спасибо за внимание.
Автор: slawter