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

в 19:29, , рубрики: ant, Git, java, openshift, play framework, Веб-разработка, хостинг, метки: , , , ,

Автоматизация развертывания Play! Framework приложений на платформе OpenShift    Автоматизация развертывания 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="..distdeployments"/>

<!-- 
Выполняем сборку проекта с помощью команды "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, мы можем соответственно собирать и разворачивать наш прокет.

Не могу сказать, что решение элегантное — скорее оно смахивает на костыль. Но этот костыль помогает в кратчайшее время наладить быструю и удобную разработку сайта в бесплатном облаке, а значит он имеет право на существование.

Удачи!

Автор: drtitoff

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js