Jenkins+Gitlab持续集成实践概要分享

引言

本文主要分享搭建持续集成环境的思路,及其过程中的要点、难点与解决方式,不详细介绍每个阶段的操作步骤(在百度上都可以找到)。我目前的持续集成实践仍在初步阶段,见知浅陋,文章在之后的实践与优化过程中会慢慢更新。希望帮助正在尝试进行Jenkins实践的朋友们整理思路,克服困难,找到合适的持续集成解决方案

Jenkins环境介绍

搭建目标

  1. 对接Gitlab,当其操作触发构建时,自动进行编译打包、部署、功能基线测试;
  2. 每日定时构建,进行代码扫描,以及单元、功能、接口、性能、稳定性等测试;
  3. 构建环境覆盖Windows、Linux、Mac平台,测试环境覆盖Windows、Linux、Mac、Android、IOS平台;

网络结构图

主控机: 触发构建的入口,用于执行编译打包,选择测试任务,生成CI报告及邮件。通过< Parameterized Remote Trigger >插件,调用执行机的Job进行测试。可添加子节点达到负载均衡。

执行机: 运行测试任务,上传结果用于生成CI报告。覆盖目标测试策略和系统平台。通过合理配置达到负载均衡。

分发job
分发job
分发job
连接
连接
连接
jenkins主控机<唯一入口>
windows 构建&测试机
macos 构建&测试机
ubuntu 构建&测试机
loader 测试机
iphone 测试机
android 测试机

Jenkins环境搭建

对接Gitlab

  1. Gitlab上添加Jenkins所在机器的SSH公钥(SSH公钥生成方法自行百度);
  2. Jenkins上安装< GitLab >插件,完成配置后,进入构建Job配置页面,在构建触发器中,勾选< Build when a change is pushed to Gitlab >,并复制其Webhook URL;
  3. 在GitLab的相应项目上,添加复制的Webhook地址,并选中可以触发构建的操作;
  4. 配置Jenkins的构建Job,在构建后操作中添加< Publish build status to GitLab >;
  5. 在Gitlab触发Jenkins构建,查看运行过程及结果;
  6. 进阶:自定义Gitlab返回结果,通过点击GitLab上的构建结果查看CI报告(待补充);
  7. 进阶:Gitlab对接Jenkins时,Pipeline的流程化(待补充);

运行及实施过程

构建参数

当构建被触发后,Jenkins根据构建参数开始进行构建(从GitLab触发则使用默认值,参考下图)。
构建参数

源码管理

安装< Git >插件,通过Git进行源码管理。

触发构建

在构建触发器中,勾选< Build when a change is pushed to Gitlab >,使用webhook自动触发构建。
构建触发

构建前的预处理

  • 构建动作中,应当先对本次构建做一些预处理,参考下图;
  • 预处理过程中变量生成的变量,可使用< Environment Injector >插件转换为本次构建的全局变量;
    构建前的预处理

代码的编译与打包

根据项目决定编译打包方式即可,此处不做描述。

代码静态扫描与单元测试

  • 搭建SonarQube系统,将代码静态扫描、单元测试进行统一管理,具体使用方式根据项目决定,方法自行百度;
  • 搭建SonarQube时,安装Mysql可能遇到麻烦,通过Mysql卸载命令清理环境(Ubuntu参考:apt-get remove --purge mysql-*);
  • Jenkins安装< SonarQube Scanner for Jenkins >插件,并进行配置后添加构建步骤,参考下图;
  • 在插件执行前,应当执行代码静态扫描、单元测试命令,并生成Sonar Scanner可识别的结果文件;
    对接SonarQube

测试环境自动部署

如需进行环境部署,应在单独构建步骤中进行。

功能、接口、性能、稳定性测试

  • Jenkins安装< Parameterized Remote Trigger >插件,调用远程Jenkins Job进行测试,参考下图;
  • 测试代码应做为单独项目,分别在Gitlab中规范管理,测试任务被调用时,从GitLab上拉取该测试项目Release分支的代码;
  • 应确定测试框架,并将用例按基线、全量、本迭代等分为多个测试套件,在Jenkins中按需使用;
  • 应输出测试报告,上传到指定HTTP服务器目录(一般由主控机构建Job根据其BuildID创建),以供查看及备份,并方便生成CI报告;
    远程调用测试

生成持续集成报告

  • 主控机构建Job执行时,应在指定HTTP服务器下,根据BuildID创建报告存放目录,用于存放各阶段报告;
  • 持续集成报告应由主控机构建Job,在< 构建后 >步骤生成,可使用< PostBuildScript >插件来帮助实现;
  • 通过读取各阶段生成的结果报告内容,来生成持续集成的报告(Python推荐使用jinja及lxml包,lxml可能在某些情况下运行异常,可使用Pipenv创建Python指定版本的虚拟环境来运行);
  • 代码静态扫描、单元测试结果,可从SonarQube上直接获取。(SonarQube结果页面由JavaScript临时生成,不方便抓取,建议通过接口获取相应结果数据。接口及参数可抓包获取,调用接口需要登陆获取cookies,代码不贴出,建议自行分析便于理解参数);
    持续集成报告

发送邮件报告

  • Jenkins上安装< Email Extension >插件,发送美观的HTML格式邮件(模版自行百度);
  • 主控机构建Job运行前,应将邮件中用到的变量初始化,以免出现异常时变量不存在而导致邮件中直接显示变量名;
  • GitLab触发Jenkins构建Job时,会将构建信息传递给Jenkins并声明为变量(如触发人、构建分支、构建原因等),在构建记录的Environment variables中可以查看这些信息;
    持续集成邮件

Jenkins插件分享

局部变量转为全局变量

< Environment Injector >
Jenkins构建过程中,由某个步骤临时生成的变量,一般仅对本步骤有效,无法提供给后面的步骤使用。通过< Environment Injector >插件,将变量写入缓存文件,再读取文件并将其中的变量声明为全局变量。缓存文件内容格式为:name=value。
局部变量转环境变量

调用远程构建任务

< Parameterized Remote Trigger >
安装< Parameterized Remote Trigger >插件,可以在构建中调用远程Jenkins的构建Job,并且在构建日志中显示远程构建的日志。远程构建结果将影响本次构建结果。
调用远程构建Job

根据构建结果执行更多操作

< PostBuildScript >
安装< PostBuildScript >插件,可以根据构建结果,在构建完成后执行构建阶段支持的所有操作,如执行shell命令等,让使用者更自由的定义Jenkins构建过程。
根据构建结果执行更多操作

其它插件

< Run Condition Plugin > 在执行步骤前添加判断

< user build vars plugin >

< MultiJob plugin >

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值