Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CruiseControl - что это такое 
:(
    Опции темы
LSD
Дата 12.7.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Решил написать скромный Факуал для тех кто слыхал, но до "попробовать" руки не доходят.

Речь о http://cruisecontrol.sourceforge.net/

Зачем круиз:
Есть проект, есть команда, которая пишет его, есть ЦВС.
Стоит себе сервачок или рабочая станция. Крутится на ней круиз.
В определённое время сливает последние изменения с ЦВСа,
    запускает предварительные какие-то операции,
    сборку,
    тесты,
    формирует отчёт доступным для вэп-публикования
    рассылает всем письмо "погляди какую .... ты написал!!!"
    и др.

    Итак. Состоит он, как и тигр, "из грудинки и вымени"(с).
    То есть из:
    -    собственно круиза, который запущен и крутится
    -    web части для отображения результатов, которая крутится в каком-то вэб-контейнере(tomcat, etc.)
    -    JMX-консоли, которая крутится в пределах круиза и доступна по ссылке из вэб-части
    
    Процесс таков:
    -    Запускаем настроенный(об этом дальше) круизонтрол.
    -    Запускаем вэб-контейнер с задеплоенным war-ником вэб части.
    -    Круиз крутится,
            * периодически запускает билд
            * получает результаты
            * складывает результаты билда, тестов и пр. в свою папку логов
            * рассылает уведомление заинтересованным в этом лицам
    -    заинтересованное лицо открывает вэб часть в браузере
            * видит результаты билда и тестов
            * при необходимости переходит по ссылке на JMX-консоль и запускает билд вручную досрочно

            
    Установка:
        * Опишу на примере линуха, но на винде практически не отличается, для тех кто отличает C:\Program Files и /usr/bin smile
        * Возьмём за подопытное круиз 2.5 (в 2.2 немного отличается структура папок, но ничего сложного)
        * (!) в ранних версиях круиза формат логов отличался, то есть старые логи в новом круизе лучше не смотреть smile
            
    -    Распаковываем архив, какой бы он не был.
    -    Переписываем в /usr/java(к примеру) папочку cruisecontrol-2.5    
    В ней есть папочки:
        * apache-ant-1.6.5 (полноценный ант - доставайте и юзайте отдельно ежели хотите).
            Я его вынес из круиза на папку выше. Ничего личного. Просто на случай сноса/смены круиза.
        * папка logs. Там логи всех билдов в своём формате.
        * projects - там тот же тестовый проект. Ну и другие, по идее.
            Опять-таки, я там ничего не держу - у проекта своё местечко есть smile
        * webapps - это та самая вэб-часть, которую надо собрать - и в контейнер.
            Скрипта я там не нашёл, можно использовать вот такое антовский:
Код


            <project name="reporting-jsp" default="war" basedir=".">

                <target name="war">
                    <war warfile="../cruisecontrol.war" webxml="./WEB-INF/web.xml">
                        <fileset dir=".">
                        
                        </fileset>
                        <classes dir="WEB-INF/classes"/>

                    </war>
                </target>
            </project>
        
            - складываем скрипт в папку webapps/cruisecontrol
            - КОНФИГУРИМ WEB.XML КАК ОПИСАНО ГОРАЗДО НИЖЕ (!!!) и лишь потом
            - запускаем ant
            - в папке webapps забираем .war и деплоим в свой контейнер
        
Настройка:
    
    -    в корне круиза находим примечательный файлик config.xml
        В нём мы опишем свой проект(проекты). Считаем что у нас есть проект MEGAPROG(ну называем мы его так ;) )
        Так опишем же его!
        Внимание на экран:
        
Код


        <cruisecontrol>

            <!-- Сколько проектов - столько раз и вписываем project. buildafterfailed показывает билдить ли дальше, если свалился -->
            <project name="MEGAPROG" buildafterfailed="false">
    
                <!-- В указанный файлик(относительно корневой папки круиза) будет текущий статус проекта(билдится, ждёт)
                    и при просмотре вэба, будет нам показываться. Если правильно вэб настроим;) Ну мы-то настроим его потом! -->
                <bootstrappers>
                    <currentbuildstatusbootstrapper 
                        file="logs/MEGAPROG/currentbuildstatus.txt" />
                </bootstrappers>
        
                <modificationset quietperiod="60">
                    <alwaysbuild />
                </modificationset>
        
                <!-- Это значит, что через каждые десять часов билд будет запущен автоматически(время в секундах) -->
                <schedule interval="36000">
                    <!-- имя файлика - это... чуть ниже расскажу, почему так сделал
                        путь к анту явно указали. Пусть будет :)
                    -->
                    <ant buildfile="MEGAPROG.wrapper.xml"
                        target="build"
                                    uselogger="true"
                        antscript="/usr/java/apache-ant-1.6.5/bin/ant"
                    />
                </schedule>
        
                <!-- В папке логов определили, что результаты для нашего проекта будут выкладываться в свою подпапочку -->
                <log dir="logs/MEGAPROG">
                    <!-- А в ней ещё подпапочка для результатов тестов -->
                    <merge dir="logs/MEGAPROG/test-results/xml" />
                </log>
        
                <!-- По факту билда будет возбуждаться письмо :) -->
                <publishers>
                    <!-- в теле будет ссылка, куда зайти поглядеть результаты
                        (указываете хост-порт вэб-части, остаток урла - стандартный + имя проекта)
                        smtp хост, адрес отправителя, сабж(в конце допицется удачно или нет сбилдилось),
                        адрес, кому слать
                    -->
                    <email buildresultsurl="http://cruis.megaprog.com:8081/cruisecontrol/buildresults/MEGAPROG/"
                        mailhost="mail.megaprog.com"
                        returnaddress="[email protected]"
                        subjectprefix="[MEGAPROG AUTO BUILD]"
                        skipusers="true"
                    >
                        <always address="[email protected]" />
                    </email>
                </publishers>    
            </project>
        </cruisecontrol>


        
        Кто у нас там прячется в папочке??? Ааа... да это ж 

        
    -    cruisecontrol.sh
        
        Приведу последнюю часть файла
        
Код


        # Сюда допишите либы, которые могут понадобиться при сборке. Если таковые есть :)
        CRUISE_PATH=$JAVA_HOME/lib/tools.jar:$LIBDIR/cruisecontrol.jar:$LIBDIR/log4j.jar:$LIBDIR/jdom.jar:$LIBDIR/ant.jar:$LIBDIR/ant-launcher.jar:$LIBDIR/jasper-compiler.jar:$LIBDIR/jasper-runtime.jar:$LIBDIR/xercesImpl-2.8.0.jar:$LIBDIR/xml-apis-2.8.0.jar:$LIBDIR/xmlrpc-2.0.1.jar:$LIBDIR/xalan-2.7.0.jar:$LIBDIR/serializer-2.7.0.jar:$LIBDIR/jakarta-oro-2.0.3.jar:$LIBDIR/mail.jar:$LIBDIR/junit.jar:$LIBDIR/activation.jar:$LIBDIR/commons-net-1.1.0.jar:$LIBDIR/starteam-sdk.jar:$LIBDIR/mx4j.jar:$LIBDIR/mx4j-tools.jar:$LIBDIR/mx4j-remote.jar:$LIBDIR/smack.jar:$LIBDIR/comm.jar:$LIBDIR/x10.jar:$LIBDIR/fast-md5.jar:$LIBDIR/maven-embedder-2.0.3-dep.jar:$LIBDIR/javax.servlet.jar:$LIBDIR/org.mortbay.jetty.jar:$LIBDIR/commons-logging.jar:$LIBDIR/commons-el.jar:${ANT_HOME}/lib/ant-apache-bsf.jar:${ANT_HOME}/lib/ant/ant-nodeps.jar:/usr/java/common.jars/bsf.jar:/usr/java/jboss-4.0.2/server/default/lib/jboss-j2ee.jar

        # convert the existing path to unix
        if [ `uname | grep -n CYGWIN` ]; then
            CRUISE_PATH=`cygpath --path --windows "$CRUISE_PATH"`
        fi
        
        #  А вот тут, следующее:
        # -jmxport 8000   - определите на каком порту будет висеть JMX круиза.
        # Перейдя сюда по хттп - можно запустить билд и проч мелочи полезные совершить
        # -webport 8082 - вэб порт. раньше был просто port. Хз. Недоразобрался.
        # Кажется, вэб часть может пахать без контейнера изнутри круиза - не дошли руки
        # -ccname cruisecontrol - ну круиз так круиз. Тоже хз. Возможно для создания нескольких экземпляров круиза на машине.
        # -cchome /usr/java/cruisecontrol-2.5 - сиё ест ькорень нашего круиза - от него мы все относительные пути и считаем.
        EXEC="$JAVA_HOME/bin/java -XX:+AllowUserSignalHandlers $CC_OPTS -cp $CRUISE_PATH -Djavax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder CruiseControlWithJetty $@ -jmxport 8000 -webport 8082 -ccname cruisecontrol -cchome /usr/java/cruisecontrol-2.5 "

        echo $EXEC
        $EXEC


        
    -    MEGAPROG.wrapper.xml

    Этот файлик будем запускать для билда. Так как указали его в config.xml
        Чтоб не ковыряться и не мучиться - собрали в него логику билда, чтоб нампрямую с build-system.xml не ручкаться
        
    
Код


    <project name="megaprog-wrapper" default="build" basedir=".">        
        <target name="build">
            <!-- Проапдейтились из ЦВСа (логи сложили в указанный файлик) -->
            <cvs command="update -d" 
                dest="/home/megaprog/build" output="/home/megaprog/logs/ant.log" />        
                
            <!-- Некий клин. Хотя. чего отлько сюда не запихнёшь... лог - сами видите куда -->
            <ant antfile="build-system.xml" dir="/home/megaprog/build" target="clean" output="/home/megaprog/logs/ant.log" />
            
            <!-- Собственно билд -->
            <ant antfile="build-system.xml" dir="/home/megaprog/build" target="test" output="/home/megaprog/logs/ant.log" />    
                
        </target>
    </project>



    -    web.xml
    
        Это надо исправить перед сборкой war'a
        
        Выбрал самое необходимое для правки. В принципе, всё на аглицком написано, но на всяк случай:
Код



        <!-- Если у вас будет лишь один проект - смело ставьте в true.
            Но если ещё хотите или уже впихнули второй(третий) - тогда false -->
        <context-param>
            <param-name>singleProject</param-name>
            <param-value>false</param-value>
            <description>Indicates if the CruiseControl instance is to report on only one project.
                If it is, then you should set this to true.
            </description>
        </context-param>
        
        <!-- Это папка, в которую мы складываем логи. Мы её определили в конфиге круиза. Теперь укажите на неё вэб-части.
            Если у вас мультипроектность(предыдущ параметр) - тогда внутри logs - папка для каждого проекта.
        -->
        <context-param>
          <!-- You can set this value via the user.log.dir property in Ant, when building the WAR file. -->
          <param-name>logDir</param-name>
          <param-value>/usr/java/cruisecontrol-2.5/logs</param-value>
          <description> This should be the full path to your CruiseControl log directory. If you
              are in single project mode, this will contain only the logs for your project. If you
              are in multi-project mode, it is expected that you will have multiple sub-directories
              inside this log directory, one for each project.
          </description>
        </context-param>
    
        <!-- Имя файла, куда пишем текущий статус билда. Помните, указывали имя? Это он. ТОлько без пути. Просто имя -->
        <context-param>
          <!-- You can set this value via the user.build.status.file property in Ant, when building the WAR file. -->
          <param-name>currentBuildStatusFile</param-name>
          <param-value>currentbuildstatus.txt</param-value>
          <description>This should be the path to your current build status file, which is relative
              to the log directory (or, in single-project mode, relative to the project's log
              directory)
          </description>
        </context-param>
    
        <!-- Если хотите, чтоб могли на JMX консоль перескакивать сразу с репорта - укажите JMX порт тот же,
            что и в скрипте запуска (cruisecontrol.sh)-->
    
        <context-param>
          <param-name>cruisecontrol.jmxport</param-name>
          <param-value>8000</param-value>
          <description>The port on which CruiseControl will connect to the JMX HttpAdaptor to "force" builds or view the
              control panel. This value can be overriden using an environment variable with the same name.
          </description>
        </context-param>
    
        
        <!-- UNCOMMENTED!!!  -->
        <!-- Разработчики пообещали, что если раскомментить сиё - круиз станет немногословным, как предыдущие версии.
            То ли я неправильно раскомментил, то ли... то ли :)))
        -->
        <context-param>
          <param-name>xslt.pmd.warning.threshold</param-name>
          <param-value>3</param-value>
          <description>PMD violations with a priority below this threshold are considered warnings and
              are only reported by the total count on the build results page.
          </description>
        </context-param>

    
Наверняка, есть ошибки в тексте, хотя и брал с живого круиза. Если что есть поправить, ПОДСКАЗАТЬ - пишите, поправляйте, подсказывайте.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1002 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.