Как я могу заставить Дженкинса сделать следующее?
Проверить магистраль/из SVN, затем создать конфигурации Debug и Release с помощью CMake, не имея дублирующих заданий для конфигураций.
Как я могу заставить Дженкинса сделать следующее?
Проверить магистраль/из SVN, затем создать конфигурации Debug и Release с помощью CMake, не имея дублирующих заданий для конфигураций.
После использования Jenkins какое-то время я обнаружил, что вы должны использовать как можно меньше заданий, если хотите повторно использовать исходный каталог.
Настройка по умолчанию в Jenkins заключается в том, что каждая сборка использует другой каталог в качестве рабочего пространства. Это означает, что вы выполняете полную проверку SVN каждой сборки. Который берет навсегда.
Если вы хотите использовать один и тот же исходный каталог для каждой сборки, вам нужно беспокоиться о синхронизации: только одна сборка за раз. Насколько мне известно, у Дженкинса нет встроенных средств синхронизации. Единственный способ - использовать только одного исполнителя. Даже тогда вы не можете контролировать способ, которым исполнитель выбирает следующую работу.
Предположим, что работа "SVN update" запускает задание "Build". Кто-то запускает "SVN update # 33", который должен запускать "Build # 33" . Если, однако, функция "Опрос SCM" Дженкинса планирует "обновление SVN" № 34, я не нашел способа сказать, что "Build # 33" должен выполняться до "SVN update # 34". Таким образом, вы можете запустить "Обновление SVN № 34" до "Build # 33" , и все не удастся. Если вы вручную не отключите задание на опрос. И напомните себе, чтобы потом снова включить его.
В любом случае. После использования Jenkins в течение двух лет я меняю свой ответ на: Никогда не используйте несколько заданий, которые обмениваются ресурсами (например, исходный каталог), и выпекают всю логику в сценарии оболочки (для циклических конфигураций).
Пришло время понять это. Вот как мне это удалось.
В разделе "Сборка" добавьте следующую командную команду Windows, которая используется для очистки директории сборки. По какой-то причине CMake не предоставляет способ сделать это.
cd c:\
rmdir /S /Q build
mkdir build
cd build
cmake --version
rem optionally: svn info c:\src
cmake -G "Visual Studio 10" c:\src
Создайте еще одно задание "Build", на этот раз сделайте это "многоконфигурационным" заданием. Это задание будет выполняться для каждой конфигурации (Debug/Release).
Теперь в Мастере конфигурации добавьте ось "configuration" со значениями "Debug Release" (whitespace = separator). К сожалению, плагин построителя CMake для Jenkins не работает с заданиями с несколькими конфигурациями. Мы даже не можем использовать cmake -build, потому что он всегда создает конфигурацию Debug. Для сборки мы должны использовать другую партию script:
cd c:\build
call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
msbuild ALL_BUILD.vcxproj /verbosity:minimal /maxcpucount:1 /property:Configuration=%configuration%
Если вы хотите построить полное решение, укажите файл .sln вместо ALL_BUILD.vcxproj. Если вы хотите создать конкретный проект, используйте
msbuild <solution>.sln /target:<project>
Используйте Работа с матрицей Jenkins. Определите одну из осей как build_mode со значениями Debug и Release. Затем вы запускаете CMake, который будет создавать обе конфигурации для инструмента компиляции, который вы будете использовать (XCode, gcc, VisualStudio и т.д.). Затем вы можете использовать build_mode, как если бы это была переменная среды, и передать ее для создания шагов, которые выполняют фактическую компиляцию.
При использовании генератора Visual Studio вы можете передать конфигурацию для сборки в cmake --build
-command:
cmake --build . --config Release
cmake --build . --config Debug
См. также Документы CMake.