Qt项目持续集成系列之-github自动化编译



  • 简介

    持续集成的概念和好处,涛哥就不再赘述了。

    本文的目标是,领各位读者入门,学会如何在GitHub上搭建Qt项目的自动化编译环境。

    后续的文章还会有Qt项目的自动化测试、及多平台自动发行。

    创建一个Qt工程

    这里使用默认的HelloWorld模板。

    文件结构如下:

    为代码创建git仓库

    使用命令行操作

    git init

    git add .

    git commit –a –m “init version”

    或者使用小乌龟(tortoiseGit)

    在github上创建仓库

    上传代码到github

    使用命令行

    git push https://github.com/yourpath/xxxxxxxxxxx master

    或者小乌龟


    使用Travis

    travis是一个第三方的CI网站,提供linux和osx的docker环境,可以与github集成。

    使用这个网站的docker,只需要在代码git仓库中放一个叫”.travis.yml”的配置文件即可,文件具体内容在下文中。

    网址: https://travis-ci.org/

    如果想知道更多关于travis的内容,访问帮助文档网址:https://docs.travis-ci.com/

    需要先注册/登陆。默认用github账号就好了。

    第一次使用会提示github账号认证之类的,通过就行了。

    登陆成功后,进入仓库管理界面,点击那个加号

    进入添加仓库界面,找到要添加的仓库HelloCI,打开开关。如果列表中没有仓库,可以点击左上角的Sync account进行同步,之后再去找仓库。

    使用appveyor

    appveyor是一个第三方的CI网站,提供windows的docker环境,可以与github集成。

    使用这个网站的docker,只需要提供一个叫” appveyor.yml”的配置文件即可,文件具体内容在下文中。

    网址:https://www.appveyor.com/

    帮助文档网址:https://www.appveyor.com/docs/

    登陆界面。这个网站用Github账号不一定能正常登陆,请自行尝试。

    本人使用的是微软的Visual Studio Team 账号

    登陆成功后,进入项目列表。点击上面的New Project进入添加项目页面。

    选github标签,然后找到HelloCI,点击ADD按钮

    添加成功了

    添加CI配置文件

    .travis.yml (后文有链接,可下载到)

    travis默认系统为ubuntu,并提供一些基础的命令。但是没有安装Qt,这里通过ubuntu源进行安装,选择的版本为5.9.6。

    关于ubuntu源 在这个网站上查看细节 https://launchpad.net/~beineri/+archive/ubuntu/

    在搜索框输入想要的qt版本,查看是否有对应的源、如何使用

    appveyor.yml

    Appveyor比较方便一些,已经装好了各种版本的vs 和Qt,这里使用vs 14.0和qt 5.9.5 msvc2015_64

    其它版本详情看这里https://www.appveyor.com/docs/windows-images-software/

    后续的自动化测试、覆盖率统计、自动部署也是在这两个配置文件里实现,这次先不说了。

    配置文件添加到仓库

    通常为了方便查看CI状态,我们会写一个README.md的文件,里面链接上CI仓库和仓库对应的状态图标(专业名字叫徽章/badge)


    上图四个红框依次编号1-4,那么

    1是travis的小图标链接,在travis网站上,对应仓库里

    点击那个小图标,在弹出的页面中,选择代码分支为master,格式为MardDown

    (也可以仿照我提供的格式来写,我的那个是个表格的方式,看着更好一些)

    2是travis仓库对应的链接

    3是appveyor的状态图标,在appveyor的对应仓库中找到:


    4是appveyor的对应仓库链接

    添加好之后的文件结构

    提交修改到github,触发CI

    用命令行

    git add .

    git commit –a –m “add CI and README”

    git push xxx master

    或者小乌龟



    提交好了,到github上看一看吧

    这次提交已经触发了CI。

    上图这四个按钮分别 对应前面的四个链接,可以点开查看状态。

    状态图标里面显示的状态是默认的,等一段时间后(CI运行完成),刷新即可看到最新的状态。

    也可以在github 仓库的commit栏,点击CI状态按钮,来查看CI信息。

    github仓库链接

    https://github.com/wentaojia2014/HelloCI

    转载声明

    文章出自涛哥的博客 -- 点击这里查看涛哥的博客
    本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可进行许可, 转载请注明出处, 谢谢合作 © 涛哥

    联系方式


    作者 涛哥
    开发理念 弘扬鲁班文化,传承工匠精神
    博客 https://wentaojia2014.github.io
    知乎 https://www.zhihu.com/people/wentao-jia
    邮箱 jared2020@163.com
    微信 xsd2410421
    QQ 759378563

    请放心联系我,乐于提供咨询服务,也可洽谈有偿技术支持相关事宜。

    打赏

    weixin
    zhifubao


    觉得分享的内容还不错, 就请作者喝杯奶茶吧~~



Log in to reply
 

走马观花

最近的回复

  • 诶 没有Linux吗??

    read more
  • 萌梦 男孩,女孩,和蛋

    menghome.png

    read more
  • 设计模式-工厂模式

    使用qt/qml来演示设计模式效果,便于学习理解

    1)定义创建对象的接口,封装对象的创建
    2)使具体化类的工作延迟到工厂子类中

    bg.png
    image.png

    1. 工厂类

    createProduct使用了参数来选择要创建哪个产品

    #ifndef FACTORY_H #define FACTORY_H #include <QObject> class Product; class QString; class Factory: public QObject { Q_OBJECT public: virtual ~Factory() = 0; virtual Product* createProduct(QString type) = 0; protected: Factory(); }; class ConcreteFactory: public Factory { Q_OBJECT public: ~ConcreteFactory(); ConcreteFactory(); public slots: Product* createProduct(QString type); }; #endif // FACTORY_H #include "factory.h" #include "product.h" #include <QtQml/qqml.h> Factory::~Factory() { } Factory::Factory() { qmlRegisterType<Product>("Product", 1, 0, "Product"); } ConcreteFactory::~ConcreteFactory() { } ConcreteFactory::ConcreteFactory() { } Product *ConcreteFactory::createProduct(QString type) { if(type == "boy") return static_cast<Product *>(new ConcreteProduct1()); else if(type == "girl") return static_cast<Product *>(new ConcreteProduct2()); return static_cast<Product *>(new ConcreteProduct1()); } 2 产品类

    一个产品是萌梦男,一个产品是萌梦女

    #ifndef PRODUCT_H #define PRODUCT_H #include <QObject> class Product: public QObject { Q_OBJECT public: virtual ~Product() = 0; Q_PROPERTY(QString icon READ icon NOTIFY iconChanged) QString m_icon; QString icon() const { return m_icon; } signals: void iconChanged(QString icon); protected: Product(); signals: public slots: }; class ConcreteProduct1: public Product { Q_OBJECT public: ~ConcreteProduct1(); ConcreteProduct1(); }; class ConcreteProduct2: public Product { Q_OBJECT public: ~ConcreteProduct2(); ConcreteProduct2(); }; #endif // PRODUCT_H #include "product.h" Product::~Product() { } Product::Product() { } ConcreteProduct1::~ConcreteProduct1() { } ConcreteProduct1::ConcreteProduct1() { m_icon = "qrc:/images/boy.png"; } ConcreteProduct2::~ConcreteProduct2() { } ConcreteProduct2::ConcreteProduct2() { m_icon = "qrc:/images/girl.png"; } 3. main.qml

    使用timer,canvas,listview等实现一个自动化生产的动画效果

    源代码

    Fork me on Gitee

    read more
  • blender建模 章鱼
    捕获2.PNG 😵

    read more

关注我们

微博
QQ群