Привет, хабражители! Сегодня я хотел бы рассказать о том, как можно воспользоваться бесплатным решением от RedHat для размещения своих сайтов в облаке на примере Play! Framework. Не буду описывать отдельно каждый из продуктов, т.к. про них уже не раз писали, расскажу лишь об их взаимодействии и моей схеме для автоматизации сборки и развертывания.
Итак, приступим. Создав JBoss приложение на OpenShift, мы получаем в распоряжение Git-репозиторий, в котором лежат семпловые исходники (для последующей замены на наши сорцы) и собранная версиях этих исходников в виде WAR-архива.
Разворачивать приложение можно двумя способами: или пропушивая на сервер исходники, которые будут собираться с помощью pom.xml, используя Maven, или пропушивая готовый WAR-архив. Других путей, к сожалению, нет: «заливать» файлы на сервер можно только через Git. Конечно, существует возможность присоединиться к серверу по SSH, но это используется больше для административных задач. На этом с OpenShift-частью пока закончим.
Play! Framework версии 2.1.1 (последней на данный момент), к сожалению, не поддерживает создание WAR-архива, он работает немного по-другому, создавая на выходе подобную структуру:
my-first-application-1.0
└ lib
└ *.jar
└ start
Я не сумел подружить такую дистрибьюцию с OpenShift (мейби это возможно — буду рад увидеть решение в комментариях), поэтому остановился на использовании версии 1.2.4.
Итак, создаем наше приложение:
play new SuperApplication cd SuperApplication play idealize / play eclipsify
На даном этапе мы получили тестовое приложение, убедиться в работоспособности которого можно выполнив команду play start
Далее добавляем соль/перец по вкусу вносим необходимые изменения — и мы готовы к развертыванию приложения.
Самое время вернуться к нашему OpenShift-репозиторию, который можно склонировать по следующему адресу: ssh://hashcode@superapplication-suffix.rhcloud.com/~/git/superapplication.git/
и в итоге мы получим нечто подобное:
superapplication
└ .git
└ bullshit
└ .openshift
└ bullshit
└ deployments
└ ROOT.war <—
└ src
└ sources
То, что нас интересует, выделено стрелкой. Соответственно, задача теперь сделать так, чтобы наш проект собирался в архив под названием ROOT.war, копировался в нужную папку, происходил коммит и пуш.
Теперь пару слов о конкретно моей ситуации. Все гораздо проще, ежели мы собираемся хранить исходники в том же самом репозитории. Но так вышло, что Web-часть была лишь одним модулем из нескольких, присутствующих у меня в проекте, а сам проект хостился на BitBucket. Поэтому папку src
из OpenShift я удалил за ненадобностью, базовую дерикторию переименовал в dist и использовал чисто для деплоя (не забудьте запушить изменения), а исходники продолжил хостить в отдельном месте. И теперь начинается шаманство…
Для автоматизации сборки и развертывания мною был выбран Ant. Не хочу долго описывать содержимое скрипта — он неплохо прокомментирован, поэтому сразу приведу его:
<project name="SuperApplication" default="dist" basedir="."> <!-- Устанавливаем глобальные переменные для скрипта. --> <property name="dist" location="..\dist"/> <property name="deployments" location="..\dist\deployments"/> <!-- Выполняем сборку проекта с помощью команды "play war -o outputname" Обратите внимание, что в Windows не смотря на корректно прописанные переменные окружения, приходится вызывать play.bat, указывая расширение. После успешного билда зипуем то, что получилось, в архив, не забывая удалить ненужные файлы после этого. --> <target name="dist" depends="clean" description="generate the distribution" > <exec executable="play.bat"> <arg line="war -o ${deployments}\ROOT" /> </exec> <zip destfile="${deployments}\ROOT.war" basedir="${deployments}\ROOT" /> <delete dir="${deployments}\ROOT"/> </target> <!-- Самое интересное - развертывание. Обратите внимание: работаем не в директории текущего проекта, а в папке ${dist}, потому что именно там находится наш OpenShift-Git-репозиторий. --> <target name="deploy" description="upload war" > <exec executable="git" dir="${dist}"> <arg line="add ."/> </exec> <exec executable="git" dir="${dist}"> <arg line="commit -m 'Deploy'"/> </exec> <exec executable="git" dir="${dist}"> <arg line="push"/> </exec> </target> <!-- Выполняем очистку, удаляя старый ROOT.war --> <target name="clean" description="clean up" > <delete file="${deployments}\ROOT.war" /> </target> </project>
Вот, в принципе, и все. Используя цели dist и deploy, мы можем соответственно собирать и разворачивать наш прокет.
Не могу сказать, что решение элегантное — скорее оно смахивает на костыль. Но этот костыль помогает в кратчайшее время наладить быструю и удобную разработку сайта в бесплатном облаке, а значит он имеет право на существование.
Удачи!
ссылка на оригинал статьи http://habrahabr.ru/post/184578/
Добавить комментарий