Статьи

CI с GitHub, Bamboo и Nexus

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

В этой статье мы начнем с создания непрерывной интеграции для произвольного проекта библиотеки с открытым исходным кодом на основе Java / Maven. Чтобы сделать это более или менее с нуля, нужно потратить больше дня, если вы достаточно знакомы с этими технологиями, за исключением той части, где мы должны получить репозиторий Maven. Мы должны подождать, пока Sonatype одобрит репо, но они довольно быстро об этом.

Я настроил это для проекта библиотеки с открытым исходным кодом под названием Kite . Детали самого проекта не важны для этого упражнения, но часть библиотеки с открытым исходным кодом:

  • С библиотеками (в отличие от приложений) легче иметь дело, потому что развертывание — это просто получение бинарного файла в репозиторий Maven, а не запуск его на живом сервере.
  • Открытый исходный код означает, что мы можем получить кучу бесплатных инфраструктур.

Вот как это будет выглядеть в конце этого поста:

Так что, если у вас есть библиотека с открытым исходным кодом, которую вы хотели разработать, сейчас самое время начать!

Найдите место для размещения источников вашего проекта

Правильный хост зависит от того, какой SCM вы предпочитаете. Если вам нравится Git, то GitHub и Bitbucket — это два очевидных (бесплатных) варианта. Bitbucket также поддерживает Mercurial и поддерживает не только бесплатные публичные репозитории, такие как GitHub, но и бесплатные приватные репозитории. В любом случае, я выбрал GitHub для Kite. Вот репо: GitHub Kite РЕПО

Настроить сервер непрерывной интеграции

Следующим шагом является настройка сервера непрерывной интеграции. Хадсон и Дженкинс оба являются довольно популярными предложениями с открытым исходным кодом, но я выбрал Atlassian’s Bamboo, потому что пользовательский интерфейс намного лучше. Bamboo бесплатен для проектов с открытым исходным кодом, и даже если вы решите его купить, это всего лишь 10 долларов за стартовую лицензию (доходы идут на благотворительность), которая дает вам местного агента по сборке. В любом случае, вы не ошибетесь с любым из них, поэтому выберите тот, который имеет смысл, и настройте его. Их все легко настроить.

Для Bamboo вам необходимо установить Java, Tomcat (или любой другой контейнер, который вам нравится), Git и Maven 3 на сервере. Bamboo — это веб-приложение на Java, поэтому вам нужны Java и Tomcat. Bamboo использует Git для извлечения кода из GitHub, а Maven для сборки кода. Вам нужно будет настроить это с помощью консоли администратора Bamboo. После установки вышеуказанных пакетов вы можете выполнить настройку полностью через интерфейс Bamboo, и это очень просто.

После ручной установки сервера Ubuntu 11.10 я использовал Chef для настройки всего на моем сервере Bamboo, за исключением развертывания самой Bamboo WAR, поскольку у Chef есть поваренные книги сообщества для Java, Tomcat, Maven и Git. (Тем не менее, обратите внимание, что в настоящее время URL-адрес в рецепте Maven 3 неверен, поэтому, если вы пойдете по этому пути, вам потребуется обновить URL-адрес и контрольную сумму.) У Джо Лисса есть отличное руководство по Chef Solo, если вы заинтересованы в дать этому шанс. Но вы не должны использовать шеф-повара. Вы можете просто использовать свой собственный менеджер пакетов, если вы предпочитаете делать это таким образом.

После того, как все исполняемые файлы настроены, вам нужно будет создать план сборки, который отбрасывает исходный код из GitHub и собирает его с помощью задачи Maven 3.

На скриншоте вы заметите, что я создал три отдельных этапа: этап принятия, этап принятия и этап развертывания. Идея после непрерывной доставки, состоит в том, чтобы отделить быструю, но не исчерпывающую часть обратной связи от медленной, но более всеобъемлющей обратной связи, и запускать ее как различные этапы сборки. Таким образом, вы сразу узнаете в большинстве случаев, когда вы нарушаете сборку (этап фиксации не проходит), и вы все равно узнаете об этом достаточно быстро, даже в тех случаях, когда разрыв включает в себя какой-то критерий интеграции или приемлемости бизнеса. Поэтому в моем плане Bamboo я сначала выполняю этап фиксации, затем запускаю интеграционные тесты на этапе приемки и, наконец, развертываю сборку моментальных снимков в моем репозитории Maven с помощью mvn deploy, если пройдены два предыдущих этапа. Это делает его доступным для постоянной интеграции.

Давайте посмотрим на часть репо Maven сейчас.

Настроить репозиторий Maven

Sonatype предлагает размещенный на Nexus репозиторий Maven бесплатно для проектов с открытым исходным кодом. Более того, они также отправят ваши артефакты в Maven Central. Так что, если это звучит хорошо для вас, вот инструкции по регистрации .

Artifactory JFrog также вариант. Как видно из ссылки, есть опция с открытым исходным кодом. Мы используем это на работе, и это довольно мило.

Для Sonatype вам нужно создать билет JIRA, чтобы получить репо, как описано выше. Вот мой.

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

В любом случае, когда у вас есть репозиторий Maven, попробуйте вручную выполнить развертывание из командной строки с помощью mvn deploy, чтобы убедиться, что вы можете загружать код. Если это работает, то вы захотите попробовать это из Bamboo. Обязательно обновите копию Bamboo файла Maven settings.xml, чтобы Bamboo мог проходить аутентификацию в репозитории Sonatype:

<?xml version="1.0" encoding="utf-8"?>
<settings>
    <servers>
        <server>
            <id>sonatype-nexus-snapshots</id>
            <username>your_username</username>
            <password>your_password</password>
        </server>
        <server>
            <id>sonatype-nexus-staging</id>
            <username>your_username</username>
            <password>your_password</password>
        </server>
    </servers>
</settings>

Как только он заработает, вы сможете перенести свои снимки в Sonatype. Вот пользовательский интерфейс Nexus , а также необработанное представление браузера .

Вывод

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

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