В этом руководстве показано, как можно автоматизировать управление приложениями с помощью реестра управления WSO2 и Jenkins (для автоматизации сборки).
Предпосылки
- Регистр управления WSO2 4.5.1
- Дженкинс
- Местоположение SVN для хранения артефактов сборки.
Что нужно отметить
- Для построения артефакта и его развертывания в определенном месте разработки SVN следует использовать Jenkins или аналогичный инструмент автоматизации сборки.
- Для развертывания Dev, QA и Production-артефактов требуется три локации SVN.
- Пользователь должен указать точное имя артефакта (без расширения) в качестве имени приложения при добавлении приложения в реестр управления WSO2.
- Этот конкретный образец протестирован с Регистром управления WSO2 4.5.1. Поэтому рекомендуется использовать одну и ту же версию продукта.
Расположение ресурса
Пожалуйста, загрузите ресурсы из следующего местоположения.
https://svn.wso2.org/repos/wso2/scratch/application-governance/
Workflow
Конфигурации
В этом случае автоматизация сборки рабочего процесса исключена, и пользователю необходимо добавить встроенный артефакт и сначала развернуть его в расположении Dev SVN. (Разработчик может использовать Jenkins для сборки и его плагин для добавления его в расположение SVN)
1) Создайте файл расширения реестра для приложений, как указано ниже. Разверните файл Application RXT в Реестре управления, как описано в
http://docs.wso2.org/wiki/display/Governance450/Deploying+an+Extension+File
<artifactType type="application/vnd.wso2-application+xml" shortName="applications" singularLabel="Application" pluralLabel="Applications" hasNamespace="false" iconSet="9"> <storagePath>/applications/@{overview_name}</storagePath> <nameAttribute>overview_name</nameAttribute> <ui> <list> <column name="Name"> <data type="path" value="overview_name" href="/applications/@{name}"/> </column> <column name="type"> <data type="type" value="overview_type"/> </column> </list> </ui> <content> <table name="Overview"> <field type="text" required="true"> <name>Name</name> </field> <field type="options"> <name>Type</name> <values> <value>car</value> <value>war</value> </values> </field> <field type="text-area"> <name>Description</name> </field> </table> </content> </artifactType>
2) Создать заявку в Реестре управления.
Добавить → Приложение
Укажите Имя автомобиля / военный файл. (Это должно быть точное имя в
папке svn без расширения),
например: myCapp
3) Добавьте Svn Executor на сервер управления реестром.
- Отредактируйте файл svn-executor-1.0.jar svn.properties и добавьте свои учетные данные svn и URL Jenkins.
- Скопируйте svn-executor-1.0.jar и svnkit-bundle-1.0.0.jar (поставляется отдельно) в папку G-REG_HOME / repository / components / lib.
- Папка copysvn-client-adapter-1.6.18.wso2v2.jartoG-REG_HOME / repository / components / dropins.
4) Добавьте новый жизненный цикл в регистр управления именами AppLifeCycle, следуя инструкциям, приведенным в
http://docs.wso2.org/wiki/display/Governance450/Adding+Lifecycles . Используйте конфигурацию жизненного цикла, указанную ниже.
<!-- ~ Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. ~ ~ WSO2 Inc. licenses this file to you under the Apache License, ~ Version 2.0 (the "License"); you may not use this file except ~ in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, ~ software distributed under the License is distributed on an ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ~ KIND, either express or implied. See the License for the ~ specific language governing permissions and limitations ~ under the License. --> <aspect name="AppLifeCycle" class="org.wso2.carbon.governance.registry.extensions.aspects.DefaultLifeCycle"> <configuration type="literal"> <lifecycle> <scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initialstate="Development"> <state id="Development"> <datamodel> <data name="checkItems"> <item name="Code Completed" forEvent=""> </item> <item name="Added to SVN" forEvent=""> </item> </data> <data name="transitionExecution"> <execution forEvent="Promote" class="org.wso2.carbon.executor.SvnDeploymentExecutor"> <parameter name="currentEnvironment" value="https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/dev"/> <parameter name="targetEnvironment" value="https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/qa"/> </execution> </data> </datamodel> <transition event="Promote" target="Testing"/> </state> <state id="Testing"> <datamodel> <data name="checkItems"> <item name="Effective Inspection Completed" forEvent=""> </item> <item name="Test Cases Passed" forEvent=""> </item> <item name="Smoke Test Passed" forEvent=""> </item> </data> <data name="transitionExecution"> <execution forEvent="Promote" class="org.wso2.carbon.executor.SvnDeploymentExecutor"> <parameter name="currentEnvironment" value="https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/qa"/> <parameter name="targetEnvironment" value="https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/prod"/> </execution> <execution forEvent="Demote" class="org.wso2.carbon.executor.SvnDeploymentExecutor"> <parameter name="currentEnvironment" value="https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/qa"/> </execution> </data> </datamodel> <transition event="Promote" target="Production"/> <transition event="Demote" target="Development"/> </state> <state id="Production"> <datamodel> <data name="checkItems"> <item name="Verify No one using the application" forEvent=""> </item> </data> <data name="transitionExecution"> <execution forEvent="Retire" class="org.wso2.carbon.executor.SvnDeploymentExecutor"> <parameter name="currentEnvironment" value="https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/qa"/> <parameter name="targetEnvironment" value="https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/prod"/> </execution> </data> </datamodel> <transition event="Retire" target="Retired"/> </state> <state id="Retired"> <datamodel> </datamodel> </state> </scxml> </lifecycle> </configuration> </aspect>
В приведенной выше конфигурации жизненного цикла вам нужно изменить расположение SVN, которые используются в рекламных акциях.
Например:
от Dev до QA
<parameter name="currentEnvironment" value="https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/dev"/>
5) Присоедините AppLifeCycle к вашему приложению.
6) Продвигать приложение от разработки до тестирования.
Это скопирует внешний CApp из среды Dev в среду QA (в соответствующих местах SVN)
7) Верните приложение из тестирования в разработку.
Это приведет к удалению артефакта из среды QA (расположение QA SVN).
Автоматизация развертывания с Jenkins
1) Запустите Jenkins и добавьте URL в файл свойств svn-executor-1.0.jar.
2) Создайте два задания Build с именами «продвижение» и «понижение».
3) Установите флажок «Эта сборка параметризована» и добавьте следующие параметры для каждого задания отдельно.
- название
- svnUrl
- штат
4) Создайте локальный репозиторий (папка в вашей локальной файловой системе) для проверки артефактов.
например: / home / user1 / repository
5) для продвижения задания Build добавьте следующий скрипт (Build → Add step step → execute shell). Пожалуйста, измените значения в соответствии с вашей средой
#!/bin/bash if [[ "${state}" == "Testing" ]] ; then ## repository location cd /media/data/wso2/support/repository/ svn checkout $svnUrl ## svn checkout location (This will be repository url + ‘qa’ as ## QA artifact was store in our repository ## https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/qa/ cd /media/data/wso2/support/repository/qa cp -r ./$name ## Location of the Testing server /media/data/wso2/support/wso2qaesb-4.5.0/repository/carbonapps/0/ fi if [[ "${state}" == "Production" ]] ; then cd /media/data/wso2/support/repository/ svn checkout $svnUrl ## svn checkout location (This will be repository url + ‘prod’ as ## Production artifact was store in our repository ## https://svn.wso2.org/repos/wso2/scratch/greg-scm-test/prod/ cd /media/data/wso2/support/repository/prod cp -r ./$name ## url of the Production server /media/data/wso2/support/wso2prodesb-4.5.0/repository/carbonapps/0/ fi
6) Для демо-задания Build используйте следующее действие (Build → Add build step → execute shell)
#!/bin/bash if [[ "${state}" == "Testing" ]] ; then ## location of the local ‘QA’ artifacts are stored. cd /media/data/wso2/support/repository/qa svn update cd /media/data/wso2/support/wso2qaesb-4.5.0/repository/carbonapps/0 rm -rf ./$name fi
7) Когда вы продвигаетесь, как в сценарии, он развернет артефакт на сервере разработки, а при его удалении он удалит приложение с сервера Carbon, который соответственно развернет / отменит развертывание.
8) У вас должен быть аналогичный сценарий для развертывания артефакта из первоначального проекта для разработчика. местоположение, которое не охвачено в образце.