我有一个 CMake 示例项目,我想在 Ubuntu 15.10 上运行的 Jenkins 上构建该项目。我已经安装了:
https://wiki.jenkins-ci.org/display/JENKINS/CMake+Plugin https://wiki.jenkins-ci.org/display/JENKINS/CMake+Plugin
并创建了两个构建步骤:
- 运行 CMake 生成 makefile
- Run make all从构建目录
它工作正常:
[build] $ cmake -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug /var/lib/jenkins/workspace/cmake-test/cmake-gtest/src
-- Configuring done
-- Generating done
-- Build files have been written to: /var/lib/jenkins/workspace/cmake-test/cmake-gtest/build
[build] $ /usr/bin/make
[ 4%] Built target libfoo
[ 9%] Built target libbar
[ 14%] Built target myApp
[ 52%] Built target gmock
[ 90%] Built target gtest
[100%] Built target testfoo
[cmake-test] $ /bin/sh -xe /tmp/hudson1792271459427590561.sh
+ cd cmake-gtest/build
+ make all
[ 4%] Built target libfoo
[ 9%] Built target libbar
[ 14%] Built target myApp
[ 52%] Built target gmock
[ 90%] Built target gtest
[100%] Built target testfoo
Finished: SUCCESS
但这是在 CI/Jenkins 设置中使用 CMake 的推荐方法吗?
目前,我的 CMake/Jenkins 构建将在每次推送时进行; 1) 生成 makefile,2) 构建项目。
我有点担心第一步 1) 生成 makefile 会消耗构建时间,并且在每次推送时执行此步骤似乎并不是最佳选择。特别是因为我不希望改变CMakeLists.txt经常使用的文件,但是当它们更改时,当然应该使用新生成的文件。
上述方法是我必须习惯的常见做法还是我错过了什么?
是的,您可以一步完成。
例如,在我的 Jenkins 环境中,在构建 Ubuntu 作业时,我使用 CMake 插件进行整个编译,因为它允许调用多个构建工具。
我在这篇文章底部的屏幕截图是作业中的 CMake 步骤(我使用 Ninja 而不是 Unix Makefiles,但效果是相同的)。
我使用两个构建调用:
-
Blank- 相当于调用
ninja
or make
在一个壳里,
-
Install- 相当于调用
DESTDIR=. ninja install
.
如果我想从 makefile 构建其他目标,我可以在此步骤中添加额外的调用。
请注意,在您的屏幕截图中,您的配置中有一个空白调用。这已经在调用了make
,并且正如您的日志输出所证实的那样,您实际上正在编译项目两次,因为您手动调用了make all
在下面的步骤中。
您可以删除 shell 步骤,您的项目仍将构建。
关于您关于最佳实践和重新生成 CMake 的问题,我建议您参阅这篇文章詹金斯最佳实践 https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Best+Practices其中指出:
为了确保构建可以重现,构建必须是干净的构建,完全通过源代码控制构建。这种做法还意味着所有代码(包括第三方 jar、构建脚本、发行说明等)都必须签入源代码控制。
请注意,我还在 CMake 步骤中选中了“Clean Build”,以便清除整个 CMake 工作区,并为每个构建从头开始生成项目。这可以确保不会出现由过时的缓存变量等引起的问题。
Screenshot of a CMake step in one of my jobs:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)