English 中文(简体)
Jenkins + Windows + CMake+多个建筑类型(调试、释放)
原标题:Jenkins + Windows + CMake + multiple build types (Debug, Release)

我怎么能让詹金斯做以下事情?

从 SVN 检出/ 从 SVN 取出后, 使用 CMake 建立调试和释放配置, 而不重复配置任务 。

最佳回答

在使用Jenkins一段时间后,我发现如果你想重新使用源目录,你应该尽可能少地使用工作。

Jenkins的默认设置是,每栋建筑使用不同的目录作为工作空间。 这意味着每栋建筑都要进行一次完整的 SVN 检查。 这需要永远的时间 。

如果您想要为每栋建筑使用相同的源目录, 您就必须担心同步: 一次只建一个。 据我所知, Jenkins 没有内置同步手段。 唯一的办法是只使用一个执行器。 即使这样, 您也无法控制执行者选择下一个任务的方式 。

换句话说, “ SVN 更新” 的触发程序是“ 建设 ” 。 有人开始“ SVN 更新 #33 ”, 这应该触发“ 建设 # 33 ” 。 但是, 如果, Jenkins “ Polll SCM” 的功能性时间表“ SVN 更新” 是 # 34 。 与此同时,我还没有找到一个方法告诉它“ 建设 # 33 ” 必须运行在“ SVN 更新 # 34 ” 之前。 因此,你可能会在“ 建设 # 33” 之前出现“ SVN 更新 # 34 ”, 而一切都会失败。 除非您手动禁用投票工作, 否则提醒您自己, 之后当然可以重新启用它 。

无论如何。在使用詹金斯两年后, 我将答案改为: 永远不要使用共享资源( 如源目录) 的多重工作, 并且把所有逻辑都烤成空格脚本( 用于循环配置 ) 。

问题回答

我花了好一阵子才弄明白的 我是如何做到的

  1. Create a free-style job "Checkout". This job is going to do all the stuff that doesn t depend on the configuration type (Debug/Release).
  2. Under "Source Code Management" select Subversion
  3. Fill in the Repository URL. Probably a good idea to make it point to /trunk.
  4. Set Local module dir to "." (no quotes)
  5. As Check-out Strategy "Emulate clean" is nice
  6. Build trigger Poll SCM, set Schedule to "5 * * * *" to check every 5 minutes.
  7. Now under Advanced Project Options check Use custom workspace and set the dir to e.g. "c:/src". We don t want Jenkins to use its internal workspace, because we want other jobs to be able to access the source.
  8. 在构建下添加以下 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
    
  9. 创建另一个任务“ 构建 ”, 这次让它成为“ 多配置” 任务。 此任务将为每个配置运行( 调试/ 释放) 。

  10. First, set the Build Triggers to build after job "Checkout"
  11. 在配置矩阵下添加一个轴“配置 ”, 值为“ 调试释放 ” (whitespace = separator ) 。 不幸的是, Jenkins 的 CMake 构建器插件不使用多配置任务 。 我们甚至不能使用 cMake - 建设, 因为它总是构建调试配置 。 要构建, 我们必须使用另外的批量脚本 :

    cd c:uild
    call "%ProgramFiles(x86)%Microsoft Visual Studio 10.0VCvcvarsall.bat"
    msbuild ALL_BUILD.vcxproj /verbosity:minimal /maxcpucount:1 /property:Configuration=%configuration%
    

如果您想要构建整个解决方案, 请指定. sln 文件, 而不是 ALL_ BUILD. vcxproj。 如果您只想要构建一个特定工程, 请使用

    msbuild <solution>.sln /target:<project>

使用 < a href=> https://wiki.jenkins- ci. org/ display/ JENKINS/building+a+matrix+project" rel= "noreferr" > Jenkins 矩阵任务 。 定义轴中的轴之一为 building_mode , 值 Debug releare 。 然后运行 CMake, 为您将要使用的编译工具( XCode, gcc, 视觉Studio, et.) 创建两个配置。 您可以使用 building_mode , 如它是一个环境变量, 并通过它来构建实际编译的步骤 。

当使用视觉工作室生成器时, 您可以将构建的配置传送到 cmake -- building - 命令 :

cmake --build . --config Release
cmake --build . --config Debug

亦见"http://www.cmake.org/cmake/help/v2.8.12/cmake.html#opt%3a-builddir" rel=“不跟随”>CMake docs





相关问题
Why running a service as Local System is bad on windows?

I am trying to find out the difference between difference service account types. I tumbled upon this question. The answer was because it has powerful access to local resources, and Network Service ...

Programmatically detect Windows cluster configuration?

Does anyone know how to programatically detect that a Windows server is part of a cluster? Further, is it possible to detect that the server is the active or passive node? [Edit] And detect it from ...

get file icon for Outlook appointment (.msg)

I ve read Get File Icon used by Shell and the other similar posts - and already use SHFileInfo to get the associated icon for any given extension, and that works great. However, Outlook uses ".msg" ...

Identifying idle state on a windows machine

I know about the GetLastInputInfo method but that would only give me the duration since last user input - keyboard or mouse. If a user input was last received 10 minutes ago, that wouldn t mean the ...

Terminating a thread gracefully not using TerminateThread()

My application creates a thread and that runs in the background all the time. I can only terminate the thread manually, not from within the thread callback function. At the moment I am using ...

热门标签