Jenkins 搭建C++持续集成环境
2017-07-04 09:33
323 查看
简介
本文主要介绍如何通过 Jenkins 搭建 C++的持续集成环境。最后达到的效果是每天00:00 - 08:00之间构建、测试和打包一次工程。
开发环境为 VS2015,测试工具为 CppUnit,打包工具为 Inno Setup。
本例的 Jenkins 版本为 Jenkins2.60.1
建立工程
新建空白解决方案,命名为 Calculator。勾选 [新建 GIT 存储库]。建立开发项目
新建控制台项目,命名为 Calculator。新建Calculator.h,内容如下:#ifndef CALCULATOR_H #define CALCULATOR_H class Calculator { public: int add(int num1, int num2) { return num1 + num2; } int sub(int num1, int num2) { return num1 - num2; } }; #endif
新建 main.cpp,内容如下:
#include "Calculator.h" #include <iostream> int main() { Calculator calculator; std::cout << "1 + 2 = " << calculator.add(1, 2) << std::endl; std::cout << "2 - 1 = " << calculator.sub(2, 1) << std::endl; return 0; }
建立测试项目
本例使用 CppUnit 作为测试工具,如果你还不了解它,请参见我的另一片博文:CppUnit 入门新建控制台项目,命名为 CalculatorTest。
将 CppUnit 头文件和库文件所在目录加入到工程搜索目录中,并将 CppUnit 库文件加入到链接器的附加依赖项。
添加main.cpp,内容如下:
#include "../Calculator/Calculator.h" #include "cppunit/TestFixture.h" #include "cppunit/extensions/HelperMacros.h" #include "cppunit/TestRunner.h" #include "cppunit/TestResult.h" #include "cppunit/TestResultCollector.h" #include "cppunit/TextOutputter.h" #include "cppunit/XmlOutputter.h" #include "cppunit/BriefTestProgressListener.h" #include <iostream> #include <fstream> #include <Windows.h> #include "cppunit/TextTestRunner.h" class CalculatorTestFixture : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(CalculatorTestFixture); CPPUNIT_TEST(testAdd); CPPUNIT_TEST(testSub); CPPUNIT_TEST_SUITE_END(); public: virtual void setUp() override { m_calculator = new Calculator(); } virtual void tearDown() override { delete m_calculator; m_calculator = nullptr; } public: void testAdd() { CPPUNIT_ASSERT(3 == m_calculator->add(1, 2)); } void testSub() { CPPUNIT_ASSERT(1 == m_calculator->sub(2, 1)); } private: Calculator *m_calculator; }; CPPUNIT_TEST_SUITE_REGISTRATION(CalculatorTestFixture); int main() { CppUnit::TestRunner runner; runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); CppUnit::TestResult result; CppUnit::BriefTestProgressListener progressListener; result.addListener(&progressListener); CppUnit::TestResultCollector resultCollector; result.addListener(&resultCollector); runner.run(result); // 打印到控制台 CppUnit::TextOutputter textOutputter(&resultCollector, std::cout); textOutputter.write(); // 打印到 xml 文件,以便 xUnit 插件处理 std::ofstream fout("TEST-Calculator.xml"); if (fout) { CppUnit::XmlOutputter xmlOutputter(&resultCollector, fout); xmlOutputter.write(); fout.close(); } // 返回 0 表示成功 return resultCollector.wasSuccessful() ? 0 : 1; }
建立发布脚本
本例用 Inno Setup 打包,在工程目录新建 Calculator.iss,内容如下:[Setup] AppName=Calculator AppVersion=1.5 DefaultDirName={pf}\Calculator DefaultGroupName=Calculator UninstallDisplayIcon={app}\Calculator.exe Compression=lzma2 SolidCompression=yes OutputBaseFilename=CalculatorSetup [Files] Source: "Calculator.exe"; DestDir: "{app}" [Icons] Name: "{group}\Calculator"; Filename: "{app}\Calculator.exe"
提交代码
切换到[团队资源管理器]页签,点击左上角,在弹出菜单中选择[更改],输入日志,点击[全部提交]按钮。准备工作
本例要用到 Git、MSBuild 和 xUnit 三个插件,第一步就是安装它们。安装 Git plugin
Git 插件一般在安装 Jenkins 的时候作为默认插件安装。如果已经安装,则跳过这一步。如果没有安装,则需要手动安装。在 Jenkins 管理页面中,点击[插件管理]进入插件管理页面,切换到[可选插件]页签,在右上角搜索框中输入 Git plugin 找到 Git plugin,点击[直接安装]按钮开始安装。安装好之后,就会在[已安装]页签找到 Git plugin,如下图:
安装 MSBuild plugin
在 Jenkins 管理页面中,点击[插件管理]进入插件管理页面,切换到[可选插件]页签,在右上角搜索框中输入 MSBuild 找到 MSBuild Plugin,点击[直接安装]按钮开始安装。如下图:安装好之后,就会在[已安装]页签找到 MSBuild Plugin。
回到 Jenkins 管理页面中,点击[Global Tool Configuration],进入全局工具设置页面。
找到[MSBuild]栏目,点击[新增MSBuild]按钮,[Name]随意填写,本例为MSBuild 14.0。[Path to MSBuild]填写MSBuild.exe所在的实际路径。如下图。点击[Save]按钮保存并退出。
安装 xUnit plugin
在 Jenkins 管理页面中,点击[插件管理]进入插件管理页面,切换到[可选插件]页签,在右上角搜索框中输入 xUnit 找到 xUnit plugin,点击[直接安装]开始安装,如下图:安装好之后,就会在[已安装]页签找到 xUnit plugin。
创建构建和测试任务
由于构建和测试结合得比较紧密,因此不把它们拆分为两个任务,而是合并成一个。在 Jenkins 管理页面中,点击[新建]进入新建页面,[Enter an item name]填写 Calculator Build and Test,任务类型选择[构建一个自由风格的软件项目],如下图所示。点击[OK]按钮进入到设置页面。
找到[源码管理]栏目,选择[Git],[Repository URL]填写工程所在目录。如下图所示。点击[Apply]按钮使设置生效。
找到[构建]栏目,点击[增加构建步骤],选择[Build a Visual Studio project or solution using MSBuild]。如下图所示:
[MSBuild Version]选择[MSBuild 14.0],[MSBuild Build File]填写Calculator.sln,[Command Line Arguments]填写
/t:Rebuild /p:Configuration=Release;Platform=x86(详细的参数信息可以在命令行中执行
MSBuild /?查看)。如下图所示。点击[Apply]按钮使设置生效。
为了运行测试用例,还需要增加一个构建步骤。再次点击[增加构建步骤],选择[Execute Windows batch command],如下图所示:
在[命令]中填写
Release\CalculatorTest.exe。如下图所示。点击[Apply]按钮使设置生效。
找到[构建后操作]栏目,点击[增加构建后操作步骤],选择[Publish xUnit test result report],如下图所示:
点击[Add]按钮,选择[CppUnit-1.12.1(default)],如下图所示:
在[Pattern]中填写
TEST*.xml,如下图所示:
最后,点击[保存]按钮保存设置并退出。
在任务控制面板页面,点击[立即构建]进行构建。如下图所示:
构建完成之后,构建历史会出现在[Build History]列表中。前面红色的圆点表示构建失败,蓝色的圆点表示构建成功。
在构建历史列表中点击列表项可以查看构建详情。在构建详情页面,可以点击[Console Output]查看控制台输出。点击[Test Result]可以查看测试结果。
创建发布任务
在 Jenkins 管理页面中,点击[新建]进入新建页面,[Enter an item name]填写 Calculator Deploy,任务类型选择[构建一个自由风格的软件项目],如下图所示。点击[OK]按钮进入到设置页面。找到[构建]栏目,点击[增加构建步骤],选择[Execute Windows batch command],如下图所示:
在[命令]里输入如下命令。注意直接将命令写在这里是不好的做法,最好是将命令写在bat中,在这里执行这个bat。这里为了演示而避繁就简。(其中iscc是Inno Setup的脚本编译器,关于它的使用可自行查阅Inno Setup的帮助文档)
点击[保存按钮]保存设置并退出。
在任务控制面板页面,点击[立即构建]进行构建。构建成功之后会在 [Jenkins 的workspace 目录]\Calculator Deploy\Output 下找到安装文件。
创建 Pipeline
下面创建一个 Pipeline 项目将上面两个项目串联起来。在 Jenkins 管理页面中,点击[新建]进入新建页面,[Enter an item name]填写 Calculator Pipeline,任务类型选择[Pipeline],如下图所示。点击[OK]按钮进入到设置页面。
找到[Build Triggers]栏目,选择[Build periodically],[日程表]填写
H H(0-7) * * *(表示每天
00:00 - 08:00进行一次构建,详细的日程表表示法可以点击右侧的
?来查看)。如下图所示。点击[Apply]按钮使设置生效。
找到[Pipeline]栏目,[Definition]选择[Pipeline script],在[Script]中编写如下脚本(Pipeline语法可以点击[Pipeline Syntax]超链接查看):
点击[保存]按钮保存并退出。
在任务控制面板页面,点击[立即构建]进行构建。构建时可以看到 Stage View会根据任务执行进度实时地变化。构建结束后会显示完整的 Stage View,如下图所示:
总结
使用Jenkins可以很方便的搭建C++的持续集成环境。一个工程的构建可以建立多个任务(构建、测试、发布等),每个任务完成单一工作。
使用Pipeline将多个任务整合成工作流。
相关文章推荐
- jenkins下搭建c++持续集成环境
- jenkins下搭建c++持续集成环境
- jenkins下搭建c++持续集成环境
- Jenkins持续集成环境搭建
- 基于 Jenkins 快速搭建持续集成环境
- Jenkins+Maven+SVN快速搭建持续集成环境(转)
- Jenkins: 使用Jenkins搭建持续集成(CI)环境
- 持续集成+持续部署(二)基于Jenkins 快速搭建持续集成环境
- 基于 Jenkins 快速搭建持续集成环境
- 使用Jenkins搭建持续集成(CI)环境
- 基于 Jenkins 快速搭建持续集成环境--转
- Jenkins持续集成环境搭建
- Android开发、测试持续集成环境Jenkins搭建
- 基于 Jenkins 快速搭建持续集成环境
- Android开发、测试持续集成环境Jenkins搭建
- jenkins持续集成环境搭建拦路虎和vc6.0编译莫名停止故障解决方法总结
- 基于 Jenkins 快速搭建持续集成环境
- 基于 Jenkins 快速搭建持续集成环境
- 基于 Jenkins 快速搭建持续集成环境
- 基于Jenkins 搭建持续集成环境