Jenkins 搭建C++持续集成环境

2 篇文章 0 订阅
1 篇文章 1 订阅

简介

本文主要介绍如何通过 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将多个任务整合成工作流。
  • 15
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Jenkins和Docker可以结合使用进行持续集成。在Jenkins机器上,由于Docker是使用root用户运行的,而Jenkins是使用普通用户jenkins运行的,所以我们需要配置jenkins用户可以使用docker命令。可以通过修改sudoers文件来实现,具体的配置如下所示: [root@osb30 ~]# visudo jenkins ALL=(root) NOPASSWD: /usr/bin/docker 这样配置之后,jenkins用户就可以在执行构建过程中使用docker命令了。 在进行Jenkins和Docker的持续集成之前,我们首先需要安装和部署Jenkins,具体的步骤如下所示: 1. 安装Jenkins,并确保Jenkins服务已经成功启动。 2. 配置Jenkins的相关设置,比如Jenkins的端口、访问权限等。 3. 创建一个Maven风格的job,用于构建我们的项目。可以设置项目的代码仓库、构建过程、构建触发器等。 4. 配置Jenkins的邮件通知设置,方便在构建过程中及时收到构建结果的通知。 5. 可选的,可以将Sonar与Jenkins集成,用于代码质量检查和分析。 接下来,我们需要进行Jenkins和Docker的集成配置,以实现持续集成。具体的步骤如下所示: 1. 在Jenkins机器上新建一个名为jenkins的用户,可以使用以下命令进行创建: [root@osb30 ~]# groupadd jenkins [root@osb30 ~]# useradd -g jenkins jenkins [root@osb30 ~]# id jenkins uid=501(jenkins) gid=501(jenkins) groups=501(jenkins) [root@osb30 ~]# echo "wisedu" | passwd --stdin jenkins &> /dev/null 2. 配置jenkins用户可以使用docker命令,通过修改sudoers文件进行配置。 现在,你已经完成了Jenkins和Docker的持续集成的配置。你可以在Jenkins上创建和配置你的项目,使用Docker进行构建和部署。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Jenkins+Docker持续集成](https://blog.csdn.net/weixin_30892987/article/details/98066958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值