整个CI流程如下:
研发人员在本地编写代码,再Push到 GitLab;
GitLab根据仓库项目配置中的CI配置,触发一个Runner启动运行;
Runner根据代码库中的 .gitlab-ci.yml 文件指令运行持续集成相关的工作;
Runner运行完毕后,将结果返回到GitLab;
研发人员在GitLab上查看结果。
整个过程,研发人员只需要关心三种操作:
项目管理员,在GitLab中开启CI,并选择一个合适的Runner;
项目管理员,参考Yml模板编写持续集成命令;
研发人员,提交后关心持续集成结果并修复问题。
Runner的概念:Runner 是任务的实际执行者, 可以在 MacOS/Linux/Windows 等系统上运行。使用 golang 进行开发。 同时也可部署在 k8s 上;Kubernetes (K8s) 是一个开源系统,用于容器化应用的自动部署、扩缩和管理。
springboot项目接入过程:参考https://docs.gitlab.com/ce/ci/quick_start/README.html
现在本地项目的跟目录下,加入一个.gitlab-ci.yml文件,一个模板配置如下:
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
- mkdir -p `pwd`/.gradle
- ln -s /opt/jacoco.gradle `pwd`/.gradle/init.gradle
cache:
paths:
- .gradle/wrapper
- .gradle/caches
stages:
- test
sonar_test_job:
stage: test
tags:
- java8
- gradle2.14
script:
- gradle clean test jacocoTestReport -Dfile.encoding=UTF-8
- sonar
artifacts:
paths:
- build/reports/jacoco
- "*/build/reports/tests"
when: always
expire_in: 1 day
services:
- redis:xxx-2.8
- td-agent:0.0.1
- zookeeper:xxx-3.4.10
有关yml语法可参考:https://en.wikipedia.org/wiki/YAML
提交之后,在项目master 进入 gitlab 页面中的 Settings→CI/CD→General pipelines settings 中 “Test coverage parsing”,填入^<name>:\s*([\d.]{1,6})%$
其中的 使用项目的 rootProject.name替换,(通常在 settings.gradle 中设置,如果没有被设置,即为项目名)
在 Settings→CI/CD→General pipelines settings 页面最底端,将 Coverage report 的 markdown 代码放入项目根目录下的 [Readme.md]文件中(如果没有,请先创建 [Readme.md]),最终的效果如下图:
如何本地测试
对于maven项目
执行mvn install, 在项目路径下,有个叫site的package,里面有jacoco或者sonarqube的包,打开,有一个index.html文件,用浏览器打开,就可以看到覆盖率报告,还有error、bad smell等也可以看到