简介

本文主要介绍如何通过 Jenkins 搭建 C++的持续集成环境。最后达到的效果是每天00:00 - 08:00之间构建、测试和打包一次工程。

开发环境为 VS2015,测试工具为 CppUnit,打包工具为 Inno Setup。

本例的 Jenkins 版本为 Jenkins2.60.1

建立工程

新建空白解决方案,命名为 Calculator。勾选 [新建 GIT 存储库]。

建立开发项目

新建控制台项目,命名为 Calculator。新建Calculator.h,内容如下:

#ifndef CALCULATOR_H
#define CALCULATOR_Hclass 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++持续集成环境相关推荐

  1. 【Jenkins+RF】从零搭建Jenkins+Robot Framework持续集成环境

    转自:https://www.jianshu.com/p/ef8d3109ac5f    感恩 安装Jenkins 系统环境:CentOS Linux release 7.3.1611 x86_64 ...

  2. 在CentOS7上安装Drone搭建CI持续集成环境

    文章目录 在CentOS7上安装Drone搭建CI持续集成环境 前言 安装前规划 安装过程 配置域名解析 安装Docker 拉取Drone Server镜像 添加GitHub OAuth Applic ...

  3. 构建基于Jenkins + Github的持续集成环境

    登录 | 注册 John_cdy的专栏 学无止境 目录视图 摘要视图 订阅 有奖征资源,博文分享有内涵 6月推荐文章汇总 CSDN博文大赛初赛晋级名单公布 关注CSDN社区微信,福利多多 构建基于Je ...

  4. GitLab 与 Jenkins 结合构建持续集成环境

    持续集成概述及运行流程 CI/CD介绍 把开发工作流程分为以下几个阶段: 编码 → 构建 → 集成 → 测试 → 交付 → 部署 正如你在上图中看到,持续集成(Continuous Integrati ...

  5. Jenkins——Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包)

    Jenkins--Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包) 持续集成及Jenkins介绍 软件开发生命周期 什么是持续集成? 持续集 ...

  6. Jenkins安装和持续集成环境配置

    Jenkins安装和持续集成环境配置 持续集成说明 Jenkins安装 Jenkins插件管理 下载中文汉化插件 Jenkins用户权限管理 安装Role-based Authorization St ...

  7. 在 CentOS 7 上搭建 Jenkins + Maven + Git 持续集成环境

    本文以部署 Spring boot + Maven 项目为例,使用码云作为代码托管仓库,在 CentOS 7 上搭建 Jenkins 持续集成环境. 1. 准备工作 1.1 安装 Java 环境 Je ...

  8. Jmeter+Ant+Jenkins接口自动化持续集成环境搭建(Linux)

    一.安装说明 系统环境:CentOS release 6.4 JDK版本:jdk1.8.0_181 Jmeter版本:apache-jmeter-3.0 Ant版本:apache-ant-1.9.13 ...

  9. 基于Jenkins搭建iOS持续集成开发环境

    原创 2017-03-06 关键点 Jenkins安装及配置 Pipeline创建及配置 ruby的版本管理工具rbenv安装 fastlane安装 常见构建问题 相关工具及技术网站推荐 CI持续集成 ...

最新文章

  1. 面试官:你写的单例模式有空指针异常,请你用Volatile改一下。我愣了五分钟...
  2. exp()用法和点乘的原因
  3. spark 随机森林算法案例实战
  4. 创建WCF第一个应用程序
  5. redis存储新闻列表_AWS上的Redis 数据存储服务_Redis云数据存储-AWS云服务
  6. 百度SEO Typecho仿Win95怀旧主题
  7. #region的快捷键+++从一个页面中弹出一个新窗口,当新窗口关闭时刷新原窗口!...
  8. Oracle SQL 优化原则(实用篇)
  9. 再谈System.arraycopy和Arrays.copyOf
  10. php 环境搭建 -- 命令配置
  11. 如何记账,教你在同一天记录多笔收支情况
  12. Flexsim国外视频教程
  13. android 厨房的使用方法,安卓ROM厨房定制工具使用教程
  14. java代理模式学习笔记
  15. facebook第三方登录前后端分离
  16. Revit二次开发——设备自动接管插件的开发思路(入门实例教程)
  17. 分享微信、新浪等等插件
  18. xPC信号采集和分析(1)
  19. 微信支付服务商java_微信APP支付服务商和子商户的流程模式
  20. [二分+DFS]南蛮图腾

热门文章

  1. 大数据可视化-----
  2. CPython入门----Fork源码到自己github并下载配置本地git
  3. python绘制缓和曲线_步进电机频率缓和曲线
  4. java 集成grizzly_获得swagger-core 1.5与Jersey和Grizzly合作
  5. 我希望,微信删除或拉黑好友时,直接在对方列表消失才好!
  6. python学习_day7---数据分析matplotlib+pandas
  7. .Net Core 对接微信支付电商收付通
  8. 无线遥控发射接收模块简介(SYN480R F115 433M )
  9. 今日头条新闻数据抓取
  10. 爬取正方教务系统课程表