Pull to refresh

Comments 49

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

А Doxygen интегрируйте, интегрируйте. Он велик :).
1) Вы можете использовать TeamCity для сборки С++ проектов через command line runner
2) Попробуйте Hudson hudson-ci.org/
Спасибо вам, коллеги!

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

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

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

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

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

P.S. Статья интересная!
Нет, процесс сборки в 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.
Важно отметить что Ant не отвечает за обновление исходников, и в этом может бть проблема у вас если svn up делается таском из Ant.
Важно отметить что Ant не отвечает за обновление исходников, и в этом может бть проблема у вас если svn up делается таском из Ant.

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

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

2. Насколько я понял — TeamCity можно установить бесплатно в редакции Professional?
Вы какую будете использовать?
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 предоставляет все что мне нужно.
Безусловно это дело вкуса, но:
Hudson — опять же GUI отстоен

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

Ни в коем случае не хочу вступать в дебаты, но если не сложно, то скажите пожалуйста, что именно вам не нравиться в GUI Hudson (это не для того, что бы «пиписьками» меряться, а в контексте критичной оценки и сравнения с TeamCity мне было бы интересно).
Hudson через чур аскетичный на мой вкус, от него прям так и веет прошлым тысячелетием, хотя наверняка со сборкой он справляется точно так же как TeamCity, зато у последнего няшные аяксовые попапы и плагин для эклипса. Но это все больше дело вкуса, может в перспективе ради эксперимента и попробую Hudson благо процесс переноса с одного CI на другой вообще не должен занять более получаса.
Насчет «нежный и интуитивно понятный интерфейс» — если сравнивать с Cruisecontrol, или еще одной байдой где использовано немного ExtJS (названия не помню, но еще тот отстой, билдер по умолчанию там кстати phing) то бесспорно, но TeamCity оно все же уступает, а так как и то и то бесплатно, и одинаково справляется со «сборкой» то я выбрал то что выглядит нарядней (и остальные их проекты тоже достаточно успешны, плюс проект постоянно развивается).
PhpUnderControl — это как раз последний скриншот в топике, но не смотря на то что он не симпатичен мне, все таки с него начать будет проще, так как по заявлениям оно работает из коробки. И последнее — оптимальная ОС для знакомства со всей этой кухней все-таки Ubuntu.
Это вы про свой коммент, то вым видней.
Если про мой, то мне реально не терпиться узнать почему в данном случае именно ubuntu является оптимальным выбором.
Минимальное количество проблем при установке / настройке, максимальное количество всяческих howto, apt-get творит чудеса, pear и pecl работает как ожидается, в Windows 7 сложности начинаются уже с установки pear.
Да бросьте. С таким же успехом я могу заявить об оптимальности SLES ( и ещё как минимум 5 других ), с которыми не возникает никаких проблем.
Ну может мой набор ос был несколько и ограничен (Win Vista/7, Ubuntu, Red Hat), но из всех них количество сложностей именно на Ubuntu свелось к минимуму (в основном благодаря тому что решение было достаточно легко нагуглить) — под Win из PECL вообще ничего не удалось установить, Red Hat — аналогичная проблема с установкой xdebug из pecl).
А вы ставили phpUnit+xdebug+crioseControl+phpUnderControl со всеми phpdepend и прочими phpcs на Windows и можете аргументировано доказать, что это было быстрее чем на Linux (Ubuntu)? Если так, то было бы очень интересно узнать. У нас как раз сейчас дилемма — продолжать #$#@ c виндой, или поставить виртуалку с Ubuntu и делать тесты в ней.
Большую половину из перечисленного ставил на винде около 1.5-2 лет назад, подробностей не помню, но точно обошлось малой кровью.
на Windows и можете аргументировано доказать, что это было быстрее чем на Linux (Ubuntu)
Я вообще сторонник того, чтоб вся web-разработка (за исключением дизайнеров/аниматоров) велась именно на той платформе на которой будет использоваться (это в основном Linux).
Мой вопрос к автору был в смысле «чем Ubuntu оптимальнее других дистрибутивов», а не «чем Ubuntu оптимальнее Win».
И еще если используется Zend Server то xdebug так просто не поставить.
Наверное все таки имелся ввиду Linux
Ну на Red Hat например тоже есть некоторые неприятные моменты.
Спасибо за статью, вопрос а работает в такой конфигурации Pre-Tested Commit и что насчет интеграции с PhpStorm?
К сожалению PhpStorm заэкспайрился, но с Eclipse интегрируется, в нем же постараюсь сегодня проверить Pre-Tested Commit.
С 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.
Кстати, phpUnderControl как-нибудь можно поставить на/с TeamCity?
Смысл сего действия?
Хотел бы смотреть динамику качества кода.
Только если параллельно, по сути это два почти одинаковых крона с разным GUI.
А у вас PHP-CPD какой-то модифицированный? Я использую настоящий PMD с модулем для разобра JS, получаю нативные отчеты о копипасте, но teamCity упорно не хочет их парсить, не в режиме type=«pmd», ни в режиме type=«pmdCpd».

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

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

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

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

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

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

Articles