And*_*urg 10 windows cmake jenkins
我怎样才能让Jenkins做到以下几点?
Checkout trunk /来自SVN,然后使用CMake构建配置Debug和Release,而不需要配置的重复作业.
我花了一段时间才弄明白这一点.这就是我设法做到的方式.
在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
Run Code Online (Sandbox Code Playgroud)创建另一个作业"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%
Run Code Online (Sandbox Code Playgroud)如果要构建整个解决方案,请指定.sln文件而不是ALL_BUILD.vcxproj.如果您只想构建特定项目,请使用
msbuild <solution>.sln /target:<project>
Run Code Online (Sandbox Code Playgroud)
使用Jenkins Matrix作业.将其中一个轴定义为build_mode,其值为Debug和Release.然后运行CMake,它将为您将使用的编译工具(XCode,gcc,VisualStudio等)创建两种配置.然后,您可以将build_mode用作环境变量,并将其传递给构建执行实际编译的步骤.
使用 Jenkins 一段时间后,我发现如果你想重用源目录,你应该使用尽可能少的作业。
Jenkins 中的默认设置是每个构建都使用不同的目录作为其工作空间。这意味着您在每次构建时都进行完整的 SVN 签出。这需要永远。
如果您想为每个构建使用相同的源目录,则必须担心同步:一次只能构建一个。据我所知,Jenkins没有内置的同步手段。唯一的方法是只使用一个执行器。即使如此,您也无法控制执行者选择下一项工作的方式。
假设作业“SVN update”触发作业“Build”。有人启动“SVN update #33”,这应该会触发“Build #33”。然而,如果 Jenkins 的“Poll SCM”功能同时安排“SVN update”#34,我还没有找到一种方法来告诉它“Build #33”必须在“SVN update #34”之前运行。因此,您最终可能会在“Build #33”之前运行“SVN update #34”,并且一切都会失败。除非您手动禁用轮询作业。当然,并提醒自己事后重新启用它。
无论如何。使用 Jenkins 两年后,我将答案更改为:永远不要使用共享资源的多个作业(例如源目录),并将所有逻辑烘焙到 shell 脚本中(用于循环配置)。
| 归档时间: |
|
| 查看次数: |
7669 次 |
| 最近记录: |