Артифакты
Для успешного развертывания, определенные артифакты должны быть представленны в вашем проекте для Heroku, чтобы успешно обнаружить ваше приложение. Эти файлы я рекомендую поместить в отдельную ветку в вашем Git, потому что Heroku использует Git для развертывания.
Для начала нам нужно создать следующую структуру папок:
bin
├── compile
└── detect
И файлы со следующим содержанием:
bin/detect
#!/usr/bin/env bash # bin/use <build-dir> if [ -f $1/src/ratpack/ratpack.groovy ]; then echo "Ratpack" && exit 0 else echo "no" && exit 1 fi
bin/compile
#!/usr/bin/env bash # bin/compile <build-dir> <cache-dir> # fail fast set -e BIN_DIR=$(cd $(dirname $0); pwd) # absolute path # parse args BUILD_DIR=$1 CACHE_DIR=$2 #env variables JAVA_DIST="openjdk1.7.0_21" JDK7_URL="https://s3.amazonaws.com/heroku-jdk/${JAVA_DIST}.tar.gz" #create the cache dir if it doesn't exist mkdir -p $CACHE_DIR cd "$BUILD_DIR" #jdk7 if [ -d .jdk7 ]; then echo "-----> .jdk7 folder found, moving along." else echo -n "-----> .jdk7 folder not found! " if [[ -d "$CACHE_DIR/.jdk7" ]]; then echo -n "Copying jdk from cache to app... " cp -r "$CACHE_DIR/.jdk7" "$BUILD_DIR" echo "Done!" else echo -n "-----> Installing ${JAVA_DIST} build (to .jdk7)....." mkdir "$BUILD_DIR/.jdk7" cd "$BUILD_DIR/.jdk7" curl --max-time 180 --location "$JDK7_URL" | tar xz cd "$BUILD_DIR" echo "Done!" fi fi cd $BUILD_DIR export JAVA_HOME="$BUILD_DIR/.jdk7" export PATH="$JAVA_HOME/bin:$PATH" echo "" echo "-----> Building project with Gradle wrapper:" echo " ./gradlew clean installApp" export GRADLE_OPTS="-Dfile.encoding=UTF-8 -server -Xmx512m -XX:+UseCompressedOops" export GRADLE_USER_HOME="$CACHE_DIR/.gradle" ./gradlew clean installApp rm -rf "$CACHE_DIR/.jdk7" cp -r .jdk7 "$CACHE_DIR/.jdk7"
Далее нам необходим Procfile, оставим его в корневом каталоге нашего Ratpack проекта.
Procfile
--- addons: config_vars: JAVA_OPTS: -Dfile.encoding=UTF-8 -server -Xmx512m -XX:+UseCompressedOops default_process_types: web: build/install/ratpack/bin/ratpack
Файл build/install/ratpack/bin/ratpack, а так же папка build/install/ratpack появляются в web процессе. Этот файл и папка будут названа именем корневой папки вашего проекта. Можно (и нужно), переопределить это значение на развертывания в Heroku, так как имя корневого проекта происходит от создаваемого хэша. Для того, чтобы исправить это, мы должны установить имя root проекта, чтобы нечто известное (в нашем случае ratpack). Это может быть настроено в файле настроек в корне проекта:
settings.gradle
rootProject.name = ‘ratpack’
Теперь нам нужно установить переменную окружения RATPACK_OPTS указывающую на переменную $PORT, предоставленную нам в процессе развертывания. Она должна быть прописана в скрипте скрытом в недрах нашего проекта в папке profile.d.
.profile.d/setenv.sh
#!/bin/bash echo "Setting environment varialbes..." export RATPACK_OPTS="-Dratpack.port=$PORT" export JAVA_HOME="${BUILD_DIR}/.jdk7"
Теперь у нас есть следующая структура папок:
├── bin
│ ├── compile
│ └── detect
├── Procfile
├── .profile.d
│ └── setenv.sh
└── settings.gradle
Процесс развертывания
Теперь нам нужно создать наше новое приложение на Heroku, используя команду buildpack. Это простая команда передает все команды артифактам, которые мы создали в нашем проекте. Команда так же создает наше приложение, как Cedar Stack основанное на Ubuntu 10.04 на Heroku.
heroku apps:create myapplication —buildpack github.com/kr/heroku-buildpack-inline.git
Далее мы переключаемся на нашу новую ветку, которую мы создали для развертывания и коммитим туда все наши артифакты.
git checkout -b deploy git add bin Procfile settings.gradle .profile.d git commit -m 'Heroku deployment artifacts.' git push heroku deploy:master
Теперь мы должны увидеть наше приложение успешно развернутым:
——> Fetching custom git buildpack… done
——> Ratpack app detected
——> .jdk7 folder not found! Copying jdk from cache to app… Done!
——> Building project with Gradle wrapper:
./gradlew clean installApp
<snip/>
——> Discovering process types
Procfile declares types -> JAVA_HOME, JAVA_OPTS, web
——> Compiled slug size: 64.8MB
——> Launching… done, v38
myapplication.herokuapp.com deployed to Heroku
И мы можем посмотреть логи, чтобы подтвердить это:
heroku logs —tail —num 100 —app myapplication
В следующей статье я расскажу, как сделать то же самое, использую Gradle плагин, который предложен здесь. Исходники можно посмотреть здесь. Оригинал статьи находится здесь. Спасибо за внимание.
ссылка на оригинал статьи http://habrahabr.ru/post/220341/
Добавить комментарий