专栏首页搜狗测试如何做Git项目的持续集成

如何做Git项目的持续集成

持续集成(简称CI)指的是在代码提交的过程中持续地进行代码的集成、构建和自动化测试;借助CI工具,可以在代码提交的过程中通过单元测试等方式尽早地发现引入的问题。一般项目中,我们可以借助持续集成达到质量前移的目的。

最近,输入法项目代码由SVN迁移到Git管理,因此小编也调研了一番Git项目如何做持续集成。本文便与大家分享GitLab-CI(持续集成工具)+SonarQube(前端展示工具)的基础实现。

整体架构图

基于GitLab-CI+SonarQube的持续集成整体架构如下:

1.开发提交代码

2.触发gitlab-ci

3.执行代码质量检测和单元测试

4.代码分析结果保存至sonarqube数据库中

5.sonarqube web端展示代码分析结果

GitLab-CI

GitLab-CI是gitlab提供的持续集成工具,操作简单,功能强大。使用过程中只需在项目根目录下创建一个.gitlab-ci.yml文件,并为项目提供一个runner,当代码变更时便会触发构建。

.gitlab-ci.yml

.gitlab-ci.yml为持续集成任务描述文件,定义项目一次pipeline过程中runner需要执行的工作内容和顺序。

在讲述如何编写.gitlab-ci.yml文件之前,我们先了解GitLab-CI中的三个基本概念:

pipeline:流水线,可以像流水线一样执行多个job;在代码提交时,gitlab可以在最新生成的 commit 上建立一个 pipeline,在同一个 pipeline 上产生的多个任务中,确保所用到的代码版本是一致的。

stage:在 pipeline 中,可以将多个任务划分在多个阶段中,只有当前阶段的所有任务都执行成功后,下一阶段的任务才可被执行。

job:任务,是 GitLab CI 系统中可以独立控制并运行的最小单位。

上述示例图中表示一次pipeline会执行7个job,这7个job分别属于4个stage,在任务执行过程中,各个stage会按照顺序执行,每个stage中job同样会按照顺序执行。任务的执行内容和执行顺序定义在.gitlab-ci.yml文件中。

.gitlab-ci.yml示例内容

stages:
  - build
  - test

build_job:
  stage: build
  script:
    - echo 'For cppcheck'
    - cppcheck -j 1 --enable=all --xml ./source/* 1>cppcheck-result.xml 2>&1
 
test_job:
  stage: test
  script:
    - cmake
    - make
    - ./CoreTest --gtest_output=xml:shell_report.xml
    - sonar-scanner
  only:
    - master

stages:定义了build、test两个stage

stage:定义当前job属于哪个stage,build_job、test_job为job的命名

script:描述当前job的执行脚本,在build_job的任务,我们借助cppcheck工具对代码做了质量检测,在test_job的任务,我们执行了cmake编译代码,然后执行单元测试。

在.gitlab-ci.yml文件中script部分内容是我们执行持续集成的主要命令,一个简单的持续集成任务只需要保证script部分脚本正确即可。对于更多任务复杂的,要求高并发等等的持续集成任务,GitLab CI 提供了许多定义变量供我们选择,完成各种条件设置,详细可以参考

https://docs.gitlab.com/ee/ci/yaml/README.html

gitlab-runner

gitlab-runner是持续集成任务的执行机器,我们只需找一台合适的机器安装gitlab-runner即可,该工具支持Linux、macOS、windows等不同的系统,安装命令也很简单,比如Linux-64位系统下执行以下命令即可:

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

不同系统的具体安装命令可参考(https://docs.gitlab.com/runner/install/

安装之后使用命令register完成项目的注册,保证项目push时,会选择对应的gitlab-runner执行命令。

sudo gitlab-runner register

安装完成后,在项目的setting界面可以查看到相应的gitlab-runner,当runner前的标志为绿色时,则表明该runner被激活可用。

SonarQube

SonarQube是一种web端代码分析界面管理工具,并且对代码能够进行多维度的质量分析:

  • 复杂度分布
  • 重复代码
  • 单元测试统计:测试覆盖率,失败case情况,新增代码覆盖率
  • 代码规则检查:通过各种代码检测工具
  • 注释率
  • 潜在的bug
  • 结构与设计:展示代码之间的耦合度

借助sonarqube可以更好地完成代码的质量分析和持续集成的结果展示。

sonarqube的安装参考官网教程即可,除此之后我们还需安装一个sonar的客户端插件,常用插件有sonar-scanner、Ant、Maven等,使用难度差异不大,小编选择了sonar-scanner插件,该插件还有一个客户端界面工具sonar-runner配合使用,如果习惯使用前端界面操作的可以选择该插件。

sonar-scanner

sonar-scanner的使用过程很简单,只需要在项目根目录下创建一个sonar-project.properties文件。

在sonarqube前端新建一个项目SogouInput,创建之后后提供一个令牌比如:5af970e2c0de89c37a174094373fa3dcb62dd270,该令牌与该项目一一对应,然后在sonar-project.properties文件中声明即可。

sonar-project.properties示例内容:

sonar.projectKey=SogouInput
sonar.projectName=SogouInput
sonar.projectVersion=1.0
sonar.sources=.
sonar.sourceEncoding=UTF-8

sonar.host.url=http://127.0.0.1:9000
sonar.login=5af970e2c0de89c37a174094373fa3dcb62dd270
sonar.language=c++

projectKey、projectName项目命名

projectVersion:项目版本,便于后期做版本分析

sources:开发代码路径

sourceEncoding:编码方式

host.url:对应的sonarqube网址

login:sonarqube中对应项目的token

language:项目使用的语言类型

结果

代码push后触发CI,CI结束之后,可在sonarqube前端查看结果。

本文分享自微信公众号 - 搜狗测试(SogouQA),作者:ly

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS多线程:GCD使用介绍

    最近作者在进行多线程问题排查和整理时,发现了好多问题都是由于GCD的使用不规范造成的,因此在这里主要分享GCD的使用方法,希望大家能够在测试时更早发现问题。

    用户5521279
  • 教你使用PyCharm实现远程调试

    最近手头被交接了几个测试脚本,都需要进行二次开发或者持续维护,这几个测试脚本分别被部署在不同的服务器中,使用的Python环境也各不相同,因此如果在本地进行二次...

    用户5521279
  • 集成AI的移动自动化测试

    前一阵子小编看到了爱奇艺Android架构师的一篇文章《爱奇艺基于AI的移动自动化框架的设计与实践》。介绍了了一种基于AI算法的自动化测试框架Aion,该框架融...

    用户5521279
  • 28. Flask 使用unittest进行单元测试

    Web程序开发过程一般包括以下几个阶段:需求分析,设计阶段,实现阶段,测试阶段。其中测试阶段通过人工或自动来运行测试某个系统的功能。目的是检验其是否满足需求,并...

    Devops海洋的渔夫
  • 2020年趋势一览:AutoML、联邦学习、云寡头时代的终结

    在 2019 年,英特尔、高通和英伟达等大型芯片制造商发布了专门设计用于仅执行基于 AI 应用程序的芯片,主要用于计算机视觉领域、自然语言处理和语音识别。

    AI科技大本营
  • C++智能指针的正确使用方式

    C++11中推出了三种智能指针,unique_ptr、shared_ptr和weak_ptr,同时也将auto_ptr置为废弃(deprecated)。

    cyhone
  • Python Algorithms - C9 Graphs

    Python算法设计篇(9) Chapter 9: From A to B with Edsger and Friends

    宅男潇涧
  • Elasticsearch最佳实践之从MongoDB到Elasticsearch

    本文采用mongo-connector作为MongoDB到Elasticsearch的同步工具。mongo-connector是基于python开发的实时同步服...

    老生姜
  • 从MongoDB实时同步数据至Elasticsearch

    本文采用mongo-connector作为MongoDB到Elasticsearch的同步工具。mongo-connector是基于python开发的实时同步服...

    腾讯云时序数据库团队
  • R语言能处理大数据吗?三点建议让你更好使用R语言

    R语言究竟能不能处理大数据,其实这个问题的答案取决于你怎样定义所需处理的大数据。R是一种语言,同时也是一种工具,并且是运行在电脑上的,运行的结果也受到电脑的性能...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券