Статьи

Миграция профиля Fuse Fabric для непрерывной доставки

JBoss Fuse — это мощная платформа распределенной интеграции со встроенными функциями для централизованного управления конфигурацией, обнаружения служб, управления версиями, шлюза API, балансировки нагрузки, отработки отказа и т. Д. Для развертываний микросервисов, ориентированных на интеграцию. JBoss Fuse 6.x построен поверх открытого проекта Fabric8 1.x. В этом сообщении блога показано, как использовать мощную автоматизацию, уже встроенную в Fuse, для создания пути миграции ваших приложений для достижения непрерывной доставки, если это необходимо.

Существует пример проекта, на который этот блог ссылается: https://github.com/christian-posta/fuse-fabric-promotion-build.

Что Fabric8 привносит в процесс автоматизации

Fabric8 1.x предоставляет простую модель группировки и подготовки во время выполнения, позволяющую вам быстро развертывать и обновлять / понижать качество ваших приложений с центральной панели мониторинга / консоли на множестве машин. Для этого вам не нужно настраивать скрипты / ansible / chef / puppet, так как автоматизация поставляется из коробки с Fuse / Fabric8.

Центральным понятием является набор текстовых файлов свойств, называемых профилями, которые декларативно описывают конечное состояние развертывания, т. Е. Они описывают, какие двоичные файлы, функции, конфигурации, зависимости и т. Д. Необходимо развертывать вместе. Профили имеют версии (для обеспечения непрерывного обновления) и могут иметь иерархические отношения для сокращения дублирования конфигураций.

Проблема

В общей среде, где у вас есть несколько команд, работающих над разными интеграциями / микросервисами / приложениями, у каждого из которых есть свои временные рамки, цикл развертывания или уже существующие циклы непрерывной интеграции, развертывание в общей среде может привести к коллизиям. Мы должны установить соглашение о том, как приложения попадают в эту среду, и быть в состоянии автоматизировать его / создать версию. Один из клиентов Continuous Delivery — версия, включающая в себя все, включая конфигурацию приложения, конфигурацию среды, сценарии автоматизации и т. Д., Чтобы при необходимости можно было воссоздавать среды на лету и избегать сред с индивидуальной настройкой вручную, которые в итоге становятся очень хрупкими и рискованными.

С профилями Fuse / Fabric8 все поддерживается версиями во встроенном бэкэнде управления конфигурацией Fuse / Fabric8, но как их можно воссоздать или как эти профили можно развернуть в Fuse при изменении приложений? И как мы можем сделать это в рамках ограничений приложений, развертываемых с разной скоростью, разных версий, разных циклов и т. Д.?

Решение

В Fabric8 встроена большая часть автоматизации, и в этом руководстве мы постараемся показать, как ее лучше всего использовать. Когда вы увидите, что можно автоматизировать, вы скажете «ах, поэтому мне не нужны все эти другие скрипты / инструменты для этого»? Давайте рассмотрим шаг за шагом. В центре внимания этого руководства будет fabric8 1.x, но более конкретно JBoss Fuse Fabric 6.1 или 6.2. Некоторые из готовых функций (я укажу их в дальнейшем) доступны только в версиях Fuse 6.2, но все же могут быть реализованы в среде Fuse 6.1 (хотя и с некоторыми сценариями)

fabric8-Maven-плагин

Предохранитель 6.1 / 6.2

Плагин fabric8-maven-plugin поставляется с предохранителем 6.1 . Он подключается к жизненному циклу Maven Maven с помощью нескольких строк конфигурации в pom.xml вашего проекта. Он предоставляет одну цель (следующий раздел) в Fuse 6.1 и добавляет дополнительные цели в Fuse 6.2.

Автоматизировать создание профилей

Предохранитель 6.1 / 6.2

Если вы посмотрите на примеры проектов / модулей в этом репозитории ( модуль EIP или модуль REST ), вы увидите, что в файле pom.xml есть раздел <build> который настраивает fabric8-maven-plugin . Например, в модуле REST:

01
02
03
04
05
06
07
08
09
10
<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>fabric8-maven-plugin</artifactId>
    <version>${fabric8.maven.plugin.version}</version>
    <configuration>
        <profile>my-rest</profile>
        <features>fabric-cxf-registry fabric-cxf cxf war swagger</features>
        <featureRepos>mvn:org.apache.cxf.karaf/apache-cxf/${version:cxf}/xml/features</featureRepos>
    </configuration>
</plugin>

Это автоматически создаст профили fabric8 для этого проекта. Если вы запустите mvn fabric8:deploy он установит профили в локально работающую fabric8. Это очень полезная цель времени разработки для проверки правильности создания профилей. (Обратите внимание, что вы должны правильно настроить файл ~ / .m2 / settings.xml, чтобы использовать un / pw для вашего фабричного сервера. По умолчанию идентификатор сервера, который он будет искать, — fabric8.upload.repo )

Автоматическое архивирование ваших профилей

Предохранитель 6.2

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>fabric8-maven-plugin</artifactId>
    <version>${fabric8.maven.plugin.version}</version>
    <configuration>
        <profile>my-rest</profile>
        <features>fabric-cxf-registry fabric-cxf cxf war swagger</features>
        <featureRepos>mvn:org.apache.cxf.karaf/apache-cxf/${version:cxf}/xml/features</featureRepos>
    </configuration>
        <executions>
            <execution>
                <id>fabric8-zip</id>
                <phase>
                    package
                </phase>
                <goals>
                    <goal>zip</goal>
                </goals>
            </execution>
        </executions>
</plugin>

С этой конфигурацией вы также заметите, что по умолчанию цель zip будет прикреплена к фазе сборки. Это доступно только в версии плагина Fuse 6.2 (см. Версии, используемые в этом проекте). Цель zip создаст профили и объединит их в один дистрибутив, который можно загрузить в репозиторий maven. Так, например, как часть шага в процессах непрерывной интеграции, вы можете создать этот zip файл и поместить его в репозиторий maven вместе с двоичными файлами для вашего проекта. Таким образом, у вас есть и двоичные файлы, и профили Fabric, развернутые в одном репозитории артефактов. Например, если вы запустите mvn clean install из корня модуля REST в этом проекте, вы можете увидеть zip профиля в папке ./target, а также соответствующее расположение в ~ / .m2 / repository.

Независимое управление версиями

В вашей среде у вас может быть несколько приложений и развертываний. У каждого будет свой номер версии и жизненный цикл. Fuse также имеет встроенные версии профилей для развертывания обновленных приложений или понижения версии приложений. Fuse Fabric имеет следующие две концепции управления версиями профилей:

  • Наборы версий
  • Git поддерживает управление изменениями

Когда мы разворачиваем наши приложения, нам нужно выровнять различные независимые версии приложений с набором версий Fuse Fabric. Так, например, в нашем проекте у нас есть проект EIP и проект REST. Проект EIP имеет версию 2.0 а проект REST — 1.5 . Итак, как мы можем ввести эти две версии приложений и их профили в Fabric?

Среда сборки

Предохранитель 6.2

Мы используем единую сборку среды для объединения отдельных проектов, которые будут иметь профили, которые необходимо добавить в реестр Fuse Fabric. Если вы посмотрите на файл pom.xml проекта среды сборки, вы увидите что-то вроде этого:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<dependency>
    <groupId>com.redhat.demo.promotion</groupId>
    <artifactId>eip</artifactId>
    <version>2.0</version>
    <type>zip</type>
    <classifier>profile</classifier>
</dependency>
<dependency>
    <groupId>com.redhat.demo.promotion</groupId>
    <artifactId>rest</artifactId>
    <version>1.5</version>
    <type>zip</type>
    <classifier>profile</classifier>
</dependency>

Вы можете видеть, что различные профили, составляющие разрозненные приложения, добавляются как зависимости, и они представляют собой zip-файлы, которые классифицируются как «профиль», которые будут просматриваться в репозитории maven. Поэтому, если вы использовали цель zip сверху и установили профили в свой репозиторий maven, вы можете ссылаться на них в сборке среды, как описано выше.

Ключевым моментом здесь является то, что у fabric8-maven-plugin есть цель под названием branch которая будет выполнять следующее:

  • Подключитесь к существующему репозиторию Fuse Fabric git и скопируйте существующий филиал в новый.
  • Получите вышеуказанные zip-зависимости от maven
  • Разархивируйте и объедините новые профили в Git-репо из ткани.
  • Зафиксируйте изменения
  • При желании перенести новую ветку обратно в Fabric

Для этого требуется Fuse 6.2 fabric8-maven-plugin, но он работает против существующей установки Fuse 6.1 или Fuse 6.2.

Конфигурация для цели branch выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>fabric8-maven-plugin</artifactId>
    <version>${fabric8.maven.plugin.version}</version>
    <executions>
        <execution>
            <id>branch</id>
            <phase>compile</phase>
            <goals>
                <goal>branch</goal>
            </goals>
            <configuration>
                <!-- lets choose the name of the version in the git repository where we will create the branch -->
                <branchName>1.0.1</branchName>
                <gitUrl>http://admin:[email protected]:8181/git/fabric</gitUrl>
                <oldBranchName>1.0</oldBranchName>
                <pushOnSuccess>true</pushOnSuccess>
            </configuration>
        </execution>
    </executions>
</plugin>

Вы указываете в файле pom.xml (или в командной строке), что такое branchName (новая ветвь) и нужно ли pushOnSuccess . Если вы указываете на существующий работающий предохранитель и запускаете:

1
mvn compile

Предохранитель должен автоматически выполнить описанные выше шаги и протолкнуть профили, как ожидается.

ПРИМЕЧАНИЕ: я только недавно внес некоторые исправления в fabric8, чтобы все работало, как описано, как было несколько ошибок ранее. Пожалуйста, дождитесь следующих ранних выпусков Fuse 6.2, чтобы воспользоваться этими функциями, как описано здесь

Ссылка: Миграция профиля Fuse Fabric для непрерывной доставки от нашего партнера JCG Кристиана Поста в блоге