我如何让詹金斯做以下事情?
签出中继/来自SVN,然后使用CMake构建配置Debug和Release,而不需要配置的重复作业。
答案 0 :(得分:9)
我花了一些时间来弄明白这一点。这就是我设法做到的方式。
在Build下添加以下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”,这次使其成为“多配置”作业。这项工作将针对每个配置运行(调试/发布)。
现在在Configuration Matrix下添加一个“配置”轴,其值为“Debug Release”(空格=分隔符)。不幸的是,Jenkins的CMake构建器插件不适用于多配置作业。我们甚至不能使用cmake --build,因为它总是构建Debug配置。要构建,我们必须使用另一个批处理脚本:
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>
答案 1 :(得分:8)
使用Jenkins Matrix job。将其中一个轴定义为 build_mode ,其值为 Debug 和 Release 。然后运行CMake,它将为您将使用的编译工具(XCode,gcc,VisualStudio等)创建两种配置。然后,您可以将 build_mode 用作环境变量,并将其传递给构建实际编译的步骤。
答案 2 :(得分:3)
使用Visual Studio生成器时,您可以将配置传递给cmake --build
- 命令:
cmake --build . --config Release
cmake --build . --config Debug
另请参阅CMake docs。
答案 3 :(得分:1)
在使用Jenkins一段时间之后,我发现如果你想重用源目录,你应该尽可能少地使用它。
Jenkins中的默认设置是每个构建使用不同的目录作为其工作区。这意味着您在每次构建时都会执行完整的SVN检查。这需要永远。
如果要为每个构建使用相同的源目录,则必须担心同步:一次只能构建一个构建。据我所知,Jenkins没有内置的同步方法。唯一的方法是只使用一个执行器。即使这样,你也无法控制执行者选择下一份工作的方式。
让我们说工作&#34; SVN更新&#34;触发工作&#34; Build&#34;。有人开始&#34; SVN更新#33&#34;,它应该触发&#34; Build#33&#34;。但是,如果詹金斯&#39; &#34;民意调查SCM&#34;功能时间表&#34; SVN更新&#34; #34在此期间,我还没有办法告诉它#34; Build#33&#34;必须在&#34; SVN更新#34&#34;之前运行。所以你最终可能会得到#34; SVN更新#34&#34;在#34; Build#33&#34;之前运行,一切都失败了。除非您手动禁用轮询作业。当然,提醒自己重新启用它。
反正。使用Jenkins两年后,我将答案改为:永远不要使用共享资源的多个作业(如源目录),并将所有逻辑烘焙到shell脚本中(用于循环配置)。