Статьи

Управление приложениями с помощью WSO2 GReg и Jenkins

В этом руководстве показано, как можно автоматизировать управление приложениями с помощью реестра управления WSO2 и Jenkins (для автоматизации сборки).

Предпосылки 

Что нужно отметить

  • Для построения артефакта и его развертывания в определенном месте разработки 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) У вас должен быть аналогичный сценарий для развертывания артефакта из первоначального проекта для разработчика. местоположение, которое не охвачено в образце.