Непрерывная интеграция и TeamCity

    Непрерывная интеграция (англ. Continuous Integration) — это практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем. В обычном проекте, где над разными частями системы разработчики трудятся независимо, стадия интеграции является заключительной. Она может непредсказуемо задержать окончание работ. Переход к непрерывной интеграции позволяет снизить трудоёмкость интеграции и сделать её более предсказуемой за счет наиболее раннего обнаружения и устранения ошибок и противоречий.

    imageВ этом топике мы в общих чертах рассмотрим процесс реализации непрерывной интеграции на примере TeamCity Enterprise 6.0 EAP (build 15400) и обратим внимание на применении инструментов рассмотренных в прошлой теме: Обеспечение качества программного продукта.

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

    TeamCity GUI будет доступен через HTTP на установленном хосте, после авторизации и конфигурирования главная страница будет выглядеть примерно как на скриншоте ниже. Каждый проект имеет свой собственный блок при большом количестве проектов можно настроить их видимость, так же статус каждого блока (свернут, развернут) запоминается. В проектах представлены конфигурации, для каждой из которое есть статус строка, в которой отображается информация о номере билда, индикатор (4 состояния: завершен успешно, завершен с ошибками, выполняется, выполняется с ошибками — все они интуитивно понятны), небольшое текстовое описание билда в котором сейчас можно наблюдать данные о количестве тестов и информацию об анализе кода. Почти у всех элементов есть AJAX подсказки которые отображают расширенную информацию и / или навигацию.



    Для создания проекта необходимо перейти в раздел «Administration», ниже вы можете увидеть что у нас уже существует созданный проект, так же из этого раздела производится основная настройка TeamCity (меню справа):



    Процесс инициализации проекта состоит из 7 простых шагов, 3 из которых подразумеваются обязательными и их предлагается заполнить с помощью небольшого помощника, рассмотрим каждый по отдельности:

    В основных настройках нам потребуется указать только имя проекта, значения всех остальных полей можно оставить по умолчанию:



    Следующим шагом является интеграция с системой контроля версий, которая представлена на следующих изображениях. Потребуется указать тип и прочие данные для конфигурации, месторасположение указывайте в корень, все последующие преобразования при получении кода необходимо делать с помощью «Checkout rules», в моем случае достаточно одного простого правила "+:trunk=>source".





    Следующий шаг это выбор инструмента для запуска процесса сборки проекта, опять же большую часть часть полей оставим по умолчанию, остальные заполним по аналогии со скриншотами, основной момент на который стоит обратить внимание — в данном примере используется встроенный Apache Ant, но если у вас есть другие предпочтения или опыт — дерзайте. конфигурационный файл будет храниться в SVN, как по по мне так это достаточно удобно.



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









    Дальше нам нужно создать build.xml который будет управлять процессом сборки (после нескольких дней общения с ним могу сказать что это чудо инструмент который может заменить большую часть небольших shell скриптов для выполнения повседневных действий):

    Стоит обратить внимание на аргумент default во второй строке и на элемент target в четвертой, дальше представлены различные задачи по запуску сторонних инструментов а так же интеграции их результатов с TeamCity. Инициализация идентичных задач для windows и unix выглядит несколько по-разному, но кстати это момент хоть и вызвал некоторые затруднения он оказался уже рассмотренным в FAQ Apache Ant. Вам же стоит только скопировать его содержимое. Взаимодействие с TeamCity производится с помощью сервисных сообщений:
    • ##teamcity[importData type='pmd' path='...']
    • ##teamcity[importData type='junit' path='...']
    • ##teamcity[publishArtifacts '...']


    Комитим содержимое в репозиторий, если настроен тригер на комит, то сборка будет запущена автоматически, если нет — нажимаем Run из GUI. Через несколько минут нам будет доступна полная информация о сборке.

    Суммарная информация о сборке.



    Изменения из репозитория.



    Выполненные тесты.



    Лог процесса сборки.



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











    P. S.
    Несмотря на то что хотелось написать статью в виде руководства к действию получился общий обзор, так что если какие-то моменты вам интересны, но не полностью раскрыты — комментируйте, постараюсь раскрыть.

    В планах так же интегрировать Doxygen, Padawan и пару других инструментов. В примере build.xml секция pdepend включена в процесс сборки по умолчанию, поэтому результаты не отображены в артефактах, так же в build.xml отсутствует секция для очистки данных предыдущих сборок — начиная с шестой версии TeamCity за нас это делает швабра. Насчет PHP CodeBrowser по какой-то пока неясной причине в текущей версии GUI стал куда отстойней, для сравнения скриншот одной из первых версий:

    image
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 49

      +1
      Интересный инструмент! Я не являюсь PHP-разработчиком, тем не менее, с удовольствием просмотрел материал. Возможно, найду аналог для С++, наверняка они есть. Прочитал я и о Padawan, теперь знаю, что существует такой инструмент для PHP. Опять же, возможно, найду аналоги. Как там говорил Шекли? «Чтобы правильно задать вопрос (в Гугле), надо знать большую часть ответа».

      А Doxygen интегрируйте, интегрируйте. Он велик :).
        +2
        1) Вы можете использовать TeamCity для сборки С++ проектов через command line runner
        2) Попробуйте Hudson hudson-ci.org/
          +4
          1) Неужто нельзя Ant'ом собрать С++ проект?
          2) Без этого плагина: wiki.hudson-ci.org/display/HUDSON/ChuckNorris+Plugin хадсон уныл.
            0
            Спасибо вам, коллеги!

            Буду экспериментировать.
              0
              Согласен, можно и Ant'ом и Maven'ом, но если у разработчика есть уже проект для сборки, то собирать руками с помощью выбранных средств имхо неразумно. Впрочем, как выясняется для Ant'а есть и CMake таски.

              Да и еще TeamCity умеет собирать msbuild/Visual Studio .sln — возможно и С++ проекты можно через этот механизм собрать.
                0
                Учитывая что Visual C++ 2010 теперь собирается MSBuild'ом — скорей всего тимсити соберет такой проект без проблем. Еще один повод перейти на 2010 =)
                  +1
                  Можно, точно. У нас кроссплатформенный проект, тесты под виндой, линуксом и маком, а также на удалённых серверах — всё через TeamCity.
                    +1
                    Это у вас N агентов установленных на разных платформах?
                      +1
                      да, агенты. так будет точнее сказать, может первая моя фраза была слегка опрометчивой.
                        +1
                        А каким образом сконфигурирована сборка проекта на нескольких (трех) агентах? Т. е. возможно ли реализовать чтобы при обнаружении изменения все три агента одновременно сливали исходники у себя и занимались чем надо? Я просто еще не пробовал больше 1 агента.
                          +1
                          Как конкретно сконфигурировано, сказать не могу, я разработчик, а не админ. Могу только описать поведение :)
                          Пост-коммит тестирование запускается на двух агентах, если сборка на них прошла успешно, то идёт тестирование покрывающее и проверка warning-ов VS и gcc, а также cppcheck. Маковская версия собирается только в nightly и weekly обычно, там и набор тестов, соответственно больше (4 тысячи против 2 тысяч у пост-коммит тестирования).
                      0
                      ох описали бы вы подробнее как и что у вас настроено и работает
                        0
                        На скриншотах показано почти все что как настроено и как работает, но если нужно детальней рассмотреть какой-то момент вы конкретизируйте его.
                +1
                Под винду можно воспользоваться CruiseControl.NET — сервер интеграции на .NET. Открытый, бесплатный. Правда конфигурировать придеться вручную рисованием XML, но это в общем случае не страшно. Сборщиков разных поддерживает, как и систем контроля версий.
                0
                конфигурационный файл будет храниться в SVN, как по по мне так это достаточно удобно.
                  0
                  Хм… Моя Oper'а сошла с ума и сама запостила…

                  Я собственно что хотел спросить:
                  конфигурационный файл будет храниться в SVN, как по по мне так это достаточно удобно.

                  Скажите, не получатся ли у вас при этом, что при внесении изменений в процесс сборки (т.е. в конфигурационный файл) первый build выполняемый после этого будет не актуальным (т.е. будет выполнен по старым «правилам»)?
                  В том смысле, что TeamCity сначала берет конфигурационный файл, а потом производит update из репозитория или же наоборот?

                  Я использую Hudson и у меня такая проблема есть (не совсем уж и проблема, но как то корявенько получается).

                  P.S. Статья интересная!
                    0
                    Нет, процесс сборки в TC6 выглядит так:
                    [08:56:21]: Checking for changes
                    [08:56:40]: Swabra (2s)
                    [08:56:40]: [Swabra] Scanning checkout directory D:\TeamCity\buildAgent\work\2ced091824a6e6f3 for newly created, modified and deleted files…
                    [08:56:43]: [Swabra] Detected 211 unchanged objects, 26 newly created objects (26 of them deleted), 0 modified objects, 1 deleted object
                    [08:56:43]: Swabra
                    [08:56:43]: [Swabra] Need a clean snapshot of checkout directory — forcing clean checkout for D:\TeamCity\buildAgent\work\2ced091824a6e6f3
                    [08:56:43]: Clearing temporary directory: D:\TeamCity\buildAgent\temp\buildTmp
                    [08:56:43]: Checkout directory: D:\TeamCity\buildAgent\work\2ced091824a6e6f3
                    [08:56:43]: Updating sources: server side checkout… (3s)
                    [08:56:45]: [Updating sources: server side checkout...] Will perform clean checkout. Reason: Checkout directory is empty or doesn't exist
                    [08:56:45]: [Updating sources: server side checkout...] Transferring cached clean patch for VCS root: Application
                    [08:56:45]: [Updating sources: server side checkout...] Building incremental patch over the cached patch
                    [08:56:46]: [Updating sources: server side checkout...] Repository sources transferred: 132.05Kb total
                    [08:56:46]: [Updating sources: server side checkout...] Updating D:\TeamCity\buildAgent\work\2ced091824a6e6f3\source
                    [08:56:47]: [Updating sources: server side checkout...] Removing D:\TeamCity\buildAgent\work\2ced091824a6e6f3\source\tests\application\controllers
                    [08:56:47]: Swabra
                    [08:56:47]: [Swabra] Saving state of checkout directory D:\TeamCity\buildAgent\work\2ced091824a6e6f3 to snapshot file D:\TeamCity\buildAgent\system\swabra\587115f8.snapshot…
                    [08:56:49]: Starting: D:\TeamCity\jre\bin\java.exe -DDotNetFramework2.0= -DDotNetFramework2.0_Path=C:\Windows\Microsoft.NET\Framework\v2.0.50727 -DDotNetFramework2.0_x86= -DDotNetFramework2.0_x86_Path=C:\Windows\Microsoft.NET\Framework\v2.0.50727 -DDotNetFramework3.0= -DDotNetFramework3.0_Path=C:\Windows\Microsoft.NET\Framework\v3.0 -DDotNetFramework3.0_x86= -DDotNetFramework3.0_x86_Path=C:\Windows\Microsoft.NET\Framework\v3.0 -DDotNetFramework3.5= -DDotNetFramework3.5_Path=C:\Windows\Microsoft.NET\Framework\v3.5 -DDotNetFramework3.5_x86= -DDotNetFramework3.5_x86_Path=C:\Windows\Microsoft.NET\Framework\v3.5 -Dagent.flow=23337721063400 -Dagent.home.dir=D:\TeamCity\buildAgent -Dagent.name=localhost -Dagent.work.dir=D:\TeamCity\buildAgent\work -Dant.home=D:\TeamCity\buildAgent\plugins\ant -Dbuild.number=40 -Dbuild.vcs.number=39 -Dbuild.vcs.number.1=39 -Dbuild.vcs.number.Application=39 -Dfile.encoding=Cp1251 -Dfile.separator=\ -Didea.build.agent.port=9090 -Didea.build.server.build.id=40 -Djava.io.tmpdir=D:\TeamCity\buildAgent\temp\buildTmp -Dos.arch=x86 "-Dos.name=Windows 7" -Dos.version=6.1 -Dpath.separator=; -Dteamcity.agent.cpuBenchmark=271 -Dteamcity.agent.dotnet.agent_url=http://localhost:9090/RPC2 -Dteamcity.agent.dotnet.build_id=40 -Dteamcity.auth.password=CDdn9RhzKaVOepoSmkowhjqvhjHxO8vH -Dteamcity.auth.userId=TeamCityBuildId=40 -Dteamcity.build.changedFiles.file=D:\TeamCity\buildAgent\temp\buildTmp\changedFiles7883234438552443762.txt -Dteamcity.build.checkoutDir=D:\TeamCity\buildAgent\work\2ced091824a6e6f3 -Dteamcity.build.properties.file=D:\TeamCity\buildAgent\temp\buildTmp\teamcity.build6275279700005393647.properties -Dteamcity.build.tempDir=D:\TeamCity\buildAgent\temp\buildTmp -Dteamcity.build.workingDir=D:\TeamCity\buildAgent\work\2ced091824a6e6f3 -Dteamcity.buildConfName=CURRENT -Dteamcity.buildType.id=bt2 -Dteamcity.configration.properties.file=D:\TeamCity\buildAgent\temp\buildTmp\teamcity.config8143399453099212196.properties -Dteamcity.dotnet.coveragelauncher=D:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\TeamCityRunners\JetBrains.dotTrace.TeamCity.CoverageRunner.exe -Dteamcity.dotnet.nunitaddin=D:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.TeamCity.NUnitAddin-NUnit -Dteamcity.dotnet.nunitlauncher=D:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher.exe -Dteamcity.dotnet.nunitlauncher.msbuild.task=D:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.MSBuildLoggers.dll -Dteamcity.dotnet.nunitlauncher1.1=D:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher1.1.exe -Dteamcity.dotnet.nunitlauncher2.0=D:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher2.0.exe -Dteamcity.dotnet.nunitlauncher2.0.vsts=D:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher2.0.VSTS.exe -Dteamcity.dotnet.platform=D:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.TeamCity.PlatformProcessRunner.1.1.exe -Dteamcity.projectName=Application -Dteamcity.runner.properties.file=D:\TeamCity\buildAgent\temp\buildTmp\teamcity.runner7892567493444159926.properties -Dteamcity.runtime.props.file=D:\TeamCity\buildAgent\temp\agentTmp\ant3934560351348717164runtime -Dteamcity.tests.recentlyFailedTests.file=D:\TeamCity\buildAgent\temp\buildTmp\testsToRunFirst8624565857484301566.txt -Dteamcity.tests.runRiskGroupTestsFirst=recentlyFailed,newAndModified "-Dteamcity.version=6.0 EAP (build 15400)" -Duser.country=RU -Duser.home=C:\ -Duser.language=ru -Duser.name=SYSTEM -Duser.timezone=Europe/Moscow -Duser.variant= -classpath D:\TeamCity\buildAgent\plugins\ant\lib\ant-launcher.jar org.apache.tools.ant.launch.Launcher -lib D:/TeamCity/buildAgent/plugins/antPlugin/lib/buildServerAntRuntime.jar;D:/TeamCity/buildAgent/lib/runtime-util.jar -listener jetbrains.buildServer.agent.ant.AgentBuildListener -buildfile D:\TeamCity\buildAgent\work\2ced091824a6e6f3\source\build.xml
                    [08:56:49]: in directory: D:\TeamCity\buildAgent\work\2ced091824a6e6f3
                    [08:56:57]: prepare
                    [08:56:57]: [prepare] mkdir
                    [08:56:57]: [mkdir] Created dir: D:\TeamCity\buildAgent\work\2ced091824a6e6f3\build


                    То есть:
                    1. Запустилась швабра и все почистила.
                    2. Обновили исходники.
                    3. Запустили сборку используя новый build.xml

                    Важно отметить что Ant не отвечает за обновление исходников, и в этом может бть проблема у вас если svn up делается таском из Ant.
                      0
                      Важно отметить что Ant не отвечает за обновление исходников, и в этом может бть проблема у вас если svn up делается таском из Ant.
                        0
                        Важно отметить что Ant не отвечает за обновление исходников, и в этом может бть проблема у вас если svn up делается таском из Ant.

                        Очень интересное замечание, т.к. у меня за update как раз отвечает один из target'ом NAnt'a. Попробую возложить задачу update на CI.
                  +2
                  Интересует 2 вопроса

                  1. Почему не Cruisecontrol+PhpUnderControl+Phing? Или Hudson?
                  Сам сейчас тоже буду исследовать эту тему и внедрять какую нибудь схему.
                  Было бы интересно услышать ваше мнение?

                  2. Насколько я понял — TeamCity можно установить бесплатно в редакции Professional?
                  Вы какую будете использовать?
                    0
                    1. Cruisecontrol — пробовал с полгода назад, GUI уныл, при установке на ноутбук под Windows 7 куча проблем была, выглядит морально устаревшим, проект слишком старый. PhpUnderControl — готовое решение для PHP проектов, но слишком новый, и опять же GUI уныл. Phing — это тот же Apache Ant только в профиль, как бонус представляет пачку готовых тасков для вских там phpmd, phpunit и прочих… в живую его не применял, но может буду как инструмент для деплоя. Hudson — опять же GUI отстоен, но по нему много материала, оссобенно за последние полгода. В конце концов запускать команды можно и по крону, так что мой выбор это TeamCity, он глаз радует хотя бы. Мое мнение начать с PhpUnderControl, потом попробовать Hudson, потом TeamCity и Cruisecontrol — на все уйдет дня два. Еще пробовал www.atlassian.com/software/bamboo/ но тоже как-то не особо впечатлен, может при интеграции с пачкой других их продуктов оно имеет смысл.

                    2. У бесплатной версии один недостаток — толком нет контроля прав, но это не смертельно, лимит в 20 учеток тоже не беда, но вот стоимость Enterprise Edition для малого бизнеса в лице одного меня реально неподъемна на данный момент ($1999 в первый год и $999 ежегодно), а Professional Edition предоставляет все что мне нужно.
                      +1
                      Безусловно это дело вкуса, но:
                      Hudson — опять же GUI отстоен

                      меня удивило.
                      Использую Hudson.
                      Точно так же в свое время стоял на распутии, что же выбрать и одним из «за» при выборе Hudson для меня было нежный и интуитивно понятный интерфейс.

                      Ни в коем случае не хочу вступать в дебаты, но если не сложно, то скажите пожалуйста, что именно вам не нравиться в GUI Hudson (это не для того, что бы «пиписьками» меряться, а в контексте критичной оценки и сравнения с TeamCity мне было бы интересно).
                        0
                        Hudson через чур аскетичный на мой вкус, от него прям так и веет прошлым тысячелетием, хотя наверняка со сборкой он справляется точно так же как TeamCity, зато у последнего няшные аяксовые попапы и плагин для эклипса. Но это все больше дело вкуса, может в перспективе ради эксперимента и попробую Hudson благо процесс переноса с одного CI на другой вообще не должен занять более получаса.
                          0
                          Насчет «нежный и интуитивно понятный интерфейс» — если сравнивать с Cruisecontrol, или еще одной байдой где использовано немного ExtJS (названия не помню, но еще тот отстой, билдер по умолчанию там кстати phing) то бесспорно, но TeamCity оно все же уступает, а так как и то и то бесплатно, и одинаково справляется со «сборкой» то я выбрал то что выглядит нарядней (и остальные их проекты тоже достаточно успешны, плюс проект постоянно развивается).
                        –2
                        PhpUnderControl — это как раз последний скриншот в топике, но не смотря на то что он не симпатичен мне, все таки с него начать будет проще, так как по заявлениям оно работает из коробки. И последнее — оптимальная ОС для знакомства со всей этой кухней все-таки Ubuntu.
                          0
                          C чего бы это?
                            0
                            Это ведь сарказм, да?
                              0
                              Это вы про свой коммент, то вым видней.
                              Если про мой, то мне реально не терпиться узнать почему в данном случае именно ubuntu является оптимальным выбором.
                                0
                                -Это
                                +Если
                                  0
                                  Минимальное количество проблем при установке / настройке, максимальное количество всяческих howto, apt-get творит чудеса, pear и pecl работает как ожидается, в Windows 7 сложности начинаются уже с установки pear.
                                    0
                                    Да бросьте. С таким же успехом я могу заявить об оптимальности SLES ( и ещё как минимум 5 других ), с которыми не возникает никаких проблем.
                                      0
                                      Ну может мой набор ос был несколько и ограничен (Win Vista/7, Ubuntu, Red Hat), но из всех них количество сложностей именно на Ubuntu свелось к минимуму (в основном благодаря тому что решение было достаточно легко нагуглить) — под Win из PECL вообще ничего не удалось установить, Red Hat — аналогичная проблема с установкой xdebug из pecl).
                                        0
                                        А вы ставили phpUnit+xdebug+crioseControl+phpUnderControl со всеми phpdepend и прочими phpcs на Windows и можете аргументировано доказать, что это было быстрее чем на Linux (Ubuntu)? Если так, то было бы очень интересно узнать. У нас как раз сейчас дилемма — продолжать #$#@ c виндой, или поставить виртуалку с Ubuntu и делать тесты в ней.
                                          0
                                          Большую половину из перечисленного ставил на винде около 1.5-2 лет назад, подробностей не помню, но точно обошлось малой кровью.
                                          на Windows и можете аргументировано доказать, что это было быстрее чем на Linux (Ubuntu)
                                          Я вообще сторонник того, чтоб вся web-разработка (за исключением дизайнеров/аниматоров) велась именно на той платформе на которой будет использоваться (это в основном Linux).
                                          Мой вопрос к автору был в смысле «чем Ubuntu оптимальнее других дистрибутивов», а не «чем Ubuntu оптимальнее Win».
                                            0
                                            И еще если используется Zend Server то xdebug так просто не поставить.
                                    0
                                    Наверное все таки имелся ввиду Linux
                                      0
                                      Ну на Red Hat например тоже есть некоторые неприятные моменты.
                                0
                                Спасибо за статью, вопрос а работает в такой конфигурации Pre-Tested Commit и что насчет интеграции с PhpStorm?
                                  0
                                  К сожалению PhpStorm заэкспайрился, но с Eclipse интегрируется, в нем же постараюсь сегодня проверить Pre-Tested Commit.
                                    0
                                    С phpStorm насколько я знаю интегрируется через IntelliJ Platform plugin. По поводу pre-tested commits, это есть, вот что пишут:
                                    If your changes pass, TeamCity (in cooperation with your IDE) AUTOMATICALLY commits them to Version Control. If they fail, your code won't be submitted to the VCS and you'll receive a notification (by email, IM, your Windows System Tray, or in your IDE), allowing you to fix the failed code immediately. And unlike the standard scenario, you'll always know WHO broke the code. Most importantly, your team never stops working and there is never broken code in your Version Control.
                                      0
                                      Вот видео как работает Pre-Tested Commit в Eclipse.
                                      www.jetbrains.com/teamcity/documentation/screenshots/TeamCity2.0.EclipsPlugin.html
                                      0
                                      Кому интересны custom tasks, могут почитать еще habrahabr.ru/blogs/ruby/67588/
                                        0
                                        Кстати, phpUnderControl как-нибудь можно поставить на/с TeamCity?
                                          0
                                          Смысл сего действия?
                                            0
                                            Хотел бы смотреть динамику качества кода.
                                            0
                                            Только если параллельно, по сути это два почти одинаковых крона с разным GUI.
                                            0
                                            А у вас PHP-CPD какой-то модифицированный? Я использую настоящий PMD с модулем для разобра JS, получаю нативные отчеты о копипасте, но teamCity упорно не хочет их парсить, не в режиме type=«pmd», ни в режиме type=«pmdCpd».

                                            У вас эти отчеты как-то учитываются в TeamCity (как тесты например) или вы их просто просматриваете?

                                            Расскажите как вы сделали доп. вкладки с результатами CC и т.п.?
                                              0
                                              Формат xml PHP-CPD не соответствует формату PMD, но его можно к нему привести используя XSLT и соответствующий ANT таск (у меня есть черновой вариант — стукнись в скайп).

                                              Пока просто просматриваю в артефактах на продакшин проекте.

                                              Насчет вкладок — я зипую ANT таском директорию с HTML файлами для таба (это можно посмотреть в build.xml выше) и после этого а в тимсити в администрейшин / сервер конфигурашион / репорт табс добавляю данные о нужной вкладке (Имя вкладки, имя артефакта, в моем случаее просто имя архива но можно и директорию указать, и индексный файл внутри архива директории).

                                              В ближайшие несколько дней выйдет ноябрьский номер журнала веб-аналитик инфо там это рассмотрено несколько детальней нежели в этом топике =)

                                                0
                                                И еще небольшое дополнение, есть планы по интеграции всех этих данных в GUI Тимсити по аналогии с тем как TC использует информацию о тестах + кастом графики для всяего этого но к сожалению в настящее время нет времени уделить этому достаточное кол-во времени, надуюсь в скором будущем удастся.

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое