Автоматизация развертывания Play! Framework приложений на платформе OpenShift

от автора

    

Привет, хабражители! Сегодня я хотел бы рассказать о том, как можно воспользоваться бесплатным решением от 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *