案例分享,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前端查看结果。

———————  End  ———————

往期推荐

MySQL 大批量插入,如何过滤掉重复数据?

副业推荐不上班!12小时删!某宝付费买的资源,请低调使用~

高并发场景下基于 Spring Boot 框架来实现 MySQL 读写分离(附源码)

java开源项目-六个经典的 SpringBoot 练手项目

开源项目-轻量级Java权限认证框架!

嚣张:分库分表就能无限扩容吗?

Netty 实现百万连接的难点和优化点

面试官:说一下线程池内部工作原理?

产品需求:用java做一个长链接转短链的微服务

【elasticsearch】数据早8小时or晚8小时,你知道为什么吗?附解决方案

java项目,这样优雅的处理 Exception 实践,客户都给你点赞

大实话:等电梯的时候,90%的程序员都想过调度算法

SpringBoot实现API接口多版本支持


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值