Jenkins的应用

164 阅读10分钟

Jenkins的应用

制品管理

简述

  • 制品是软件开发过程中产生的多种有形副产品
  • 包括用例、UML图、设计文档、二进制包等
  • 制品管理涉及的两件事情
    • 如何将制品放到制品库中
    • 如何从制品库中取出制品
  • 目前现成的制品库有
    • Nexus
    • Artifactory

Artifactor

简述

  • 可以用于归档JAR包,也可以归档所有类型的制品
  • 团队初期可以考虑使用这种方式管理简单的制品

常用的参数

  • artifacts,需要归档的文件路径
  • fingerprint,需要对归档的文件进行签名,布尔类型
  • excludes,需要排除的文件路径
  • caseSensitive,对路径大小写是否敏感,布尔类型
  • onlyIfSuccessful,只在构建成功时进行归档,布尔类型

Nexus

搭建环境

安装Nexus

发布制品

maven deploy插件发布制品

安装maven deploy插件
  • 配置pom配置文件

    ---------------pom文件配置---------------
    <plugin>                
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-deploy-plugin</artifactId>
    	<version>3.1.1</version>            
    </plugin>
    
插件相关配置
  1. 配置发布地址
  2. 配置访问nexus的用户名和密码

Nexus Platform插件发布制品

安装Nexus Platform插件
插件相关配置
  1. 进入Manage Jenkins
  2. Configure System
  3. Sonatype Nexus页
  4. 设置Nexus 服务器地址与访问凭证
  5. 在pipeline中加入nexusPublisher步骤

管理Docker镜像仓库

操作流程

  1. 选择Administration
  2. 选择Repository
  3. 选择Repositories
  4. 单击docker(hosted),进入Docker私有仓库创建页
  5. 填写表单
  6. 创建Docker私有仓库凭证
    • 将镜像推送到Docker私有仓库所需要的访问凭证
  7. 构建并发布Docker镜像到仓库中

管理原始制品

简述

Nuxus提供了对raw仓库的支持,raw仓库可以被理解为一个文件系统,我们可以在该仓库中创建目录

创建raw仓库

  1. 选择Administration
  2. 选择Repository
  3. 选择Repositories
  4. 单击raw(hosted),进入raw仓库创建页
  5. 填写表单,点击create repository完成仓库创建
  6. 配置访问凭证

上传制品,获取制品

  1. 填写访问凭证
  2. 在pipeline中上传制品

从其它pipeline中拷贝制品

  • Copy Artifact插件

多分支构建

创建多分支pipeline

  1. 选择"MultibranchPipeline"
  2. 设置代码仓库地址
  3. 设置分支扫描触发策略
  4. 孤儿任务(Orphaned Item)处理策略

根据分支部署到不同的环境

  • 使用if else指令进行处理
  • 使用when指令进行处理,when指令必须至少包含一个条件
  • GitLab trigger对多分支pipeline的支持
  • Generic Webhook Trigger插件在多分支pipeline场景下的应用

可视化构建及视图

Green Balls插件

将构建成功的状态图标修改为绿色的的图标

Build Monitor View插件

可以将Jenkins项目以一块看板的形式呈现,可以直观的看到某个环境的部署情况

添加监控视图看板

  • 单击+号添加新视图
  • 进入添加表单后,选择Build Monitor View选项
  • 进入Build Monitor View编辑页,选择在视图中显示哪些Job,以及它们的排序规则
  • 编辑完成后,页面就变成了之前配置的哪些内容看板

通过项目维度来建立视图

  1. 点击New View选项
  2. 填写视图信息后,点击ok
  3. 在Job Filters部分,勾选Use a regular expression to include jobs into the view 复选框
  4. 然后输入正则表达式,用于匹配项目名称
  5. 匹配的项目将会显示在此视图中
  6. 单击ok,完成视图的建立

设置默认视图

  1. 进入Manage Jenkins
  2. Configure System
  3. 找到Default view选项,设置默认视图

分布式构建与并行构建

分布式架构

简述

jenkins采用的是master和agent架构

node,节点,指包含Jenkins环境及有能力执行项目的机器

节点分析

  • master节点
    • 负责提供界面、处理Http请求及管理构建环境
  • agent节点
    • 负责执行构建
    • 该类节点下的executor(执行器),是真正执行项目的单元

水平拓展方案

agent节点

增加agent节点的方式
  • 通过JNLP协议增加agent节点
  • 通过JNLP协议增加Windows agent
  • 通过Swarm插件增加agent
对agent打标签

用于区分逻辑组

  • 打标签维度
    • 工具链
    • 操作系统
    • 系统位数
使用
  • 通过标签指定节点,即指定agent
    • agent{label 'jdk8'}
  • 不分配节点,系统自动分配
    • agent none

代码质量管理

静态代码分析

简述

  • 静态代码分析是指在不运行程序的前提下,对源代码进行分析或检查
  • 包括代码风格、可能出现的空指针、代码快大小、重复的代码等
  • 使用机器来对规范的实施进行检查
  • 常见的静态代码分析器
    • Check-style
    • FindBugs
    • PMD

PMD代码规范检查

简述

PMD是一款可拓展的静态代码分析器,不仅可以对代码风格进行检查,还可以检查设计、多线程、性能等方面的问题

maven项目中的配置

maven-pmd-plugin插件并不会自动使用p3c-pmd,需要在引入dependencies部分手动加入p3c-pmd依赖,然后再rulesets属性中引入p3c的规则

  • pom.xml的配置

    <!-- 阿里p3c插件 -->
    <plugin> 
    	<groupId>org.apache.maven.plugins</groupId> 
    	<artifactId>maven-pmd-plugin</artifactId> 
    	<version>3.15.0</version> 
    	<configuration>  
    		<verbose>true</verbose>  
    		<!-- 规范的配置 -->  
    		<rulesets>   
    <ruleset>rulesets/java/ali-comment.xml</ruleset>		<ruleset>rulesets/java/ali-concurrent.xml</ruleset>	<ruleset>rulesets/java/ali-constant.xml</ruleset>   	<ruleset>rulesets/java/ali-exception.xml</ruleset>   <ruleset>rulesets/java/ali-flowcontrol.xml</ruleset>   <ruleset>rulesets/java/ali-naming.xml</ruleset>   <ruleset>rulesets/java/ali-oop.xml</ruleset>
    <ruleset>rulesets/java/ali-orm.xml</ruleset>
    <ruleset>rulesets/java/ali-other.xml</ruleset>   <ruleset>rulesets/java/ali-set.xml</ruleset>
    		</rulesets>
    		<printFailingErrors>true</printFailingErrors>
    	</configuration>
    	<executions>  
    		<execution>   
    			<id>pmd-check-verify</id>
    			<phase>package</phase>
    			<goals>
    				<goal>check</goal>
    			</goals>
    		</execution>
    		<execution>
    			<id>pmd-pmd-site</id>
    			<phase>site</phase>
    			<goals>
    				<goal>cpd</goal>
    			</goals>
    		</execution>
    	</executions>
    </plugin>
    

jenkins中的PMD的配置

插件安装

  1. 安装Jenkins PMD插件
  2. 执行pipeline后,可以在任务详情页面看到PMD报告的链接
  3. 单击链接进入报告页面,可以看到更详细的信息

配置示例

#在Jenkinsfile中加入pmd步骤
pipeline { 
	agent any 
	tools {  
		maven 'mvn-3.5.4' 
	} 
	stages {  
		stage('pmd'){   
			steps {    
				sh 'mvn pmd:pmd'   
			}  
		} 
	} 
	post {  
		always {   
			pmd(canRunOnFailed: true, pattern:'**/target/pmd.xml')  
		} 
	}
}

单元测试

简述

  • Jenkins并不会帮我们写单元测试,需要人工进行编写单元测试
  • 由机器负责自动化执行此类单元测试

JUnit插件

简述

  • Junit是一个Jave语言的单元测试框架,用于单元测试与报告生成
  • 当执行maven test命令时,Maven会执行测试阶段,然后生成测试报告

操作流程

  1. 安装Jenkins JUnit插件

  2. 在Jenkins中加入junit步骤,通常将junit步骤放在post always中,因为当测试不通过时依然可以收集到测试报告

  3. 示例

    post { 
    	always {  
    		junit testResults:"**/target/surefire-reports/*.xml" 
    	}
    }
    
  4. 当pipeline运行结束后, 在构建页可以通过TestResult查看测试报告详细信息

代码覆盖率

JaCoCo插件

简述
  • 是一个免费的Java代码覆盖率的库,能帮助我们监测出代码覆盖率,并输出覆盖率报告
  • 支持多维度的覆盖率测试
覆盖率维度
  • 指令覆盖率(Instruction Coverage)
  • 分支覆盖率(Branch Converage)
  • 圈复杂度覆盖率(Cyclomatic Complexity Coverage)
  • 行覆盖率(Line Coverage)
  • 方法覆盖率(Method Coverage)
  • 类覆盖率(Class Coverage)
    • Class Coverage
使用
  1. 安装JaCoCo插件
  2. 在Maven项目中引入JaCoCo插件,执行maven jacoco生成代码覆盖率测试报告
  3. 在pipeline file中配置jacoco在mvn命令之后执行
  4. pipeline运行完成后,在任务详情页中查看测试报告
常见问题
  • 代码覆盖率越高,软件的质量就越高吗?
    • 代码覆盖率需要与其它指标(代码变动率、复杂度)等进行一并考虑
    • 覆盖率与质量之间有弱正相关性,单并不适合作为开发人员的KPI指标

性能测试

Jenkins环境配置

  • 安装python环境
  • 安装Preformance插件
  • 安装Taurus?不需要自行安装,Performance插件如果发现机器上没有安装Taurus,它会自动运行pip install bzt命令进行安装

Taurus

简述

  • 是一个开源的自动化框架,用于运行各种开源负载测试工具和功能测试工具
  • 支持的常见的负载测试工具
    • Apache Jmeter
    • Selenium
    • Gatling
    • The Grinder
  • 特性
    • 支持YAML或JSON来描述性能测试
    • 会根据选择的性能测试类型自动下载相应的工具

应用

运行JMeter测试

  • 配置jmeter的steps

    pipeline { 
    	agent any 
    	stages {  
    		stage ('performance test') {   
    			steps {    
    				bzt params: 'test_config.yml'   
    			}  
    		} 
    	}
    }
    
  • 在项目中配置test.yml文件

    execution:
    	- scenario: simple
    
    scenarios:
    	simple:
    		script: simpleTestPlan.jmx
    
    modules:
    	jmeter:
    		download-link: http:xx.com/apache-jmeter-{version}.zip
    	version: 5.0
    
bzt的参数列表
  • params,字符串类型,配置文件的路径
  • alwaysUseVirtualenv,布尔类型,如果为false,则不使用virtualenv进行环境隔离
  • bztVersion,bzt版本,字符串类型
  • generatePerformanceTrend,是否在Jenkins项目详情页生成性能趋势图
  • useBztExitCode,使用bzt步骤的退出码作为Jenkins项目的构建结果
  • useSystemSitePackages,为virtualenv加上--system-site-packages参数
  • workingDirectory,指定bzt的工作目录

代码质量检查

SonarQube

简述

  • 代码质量管理工具,能对20多种编程语言进行代码味道、Bug、安全漏洞方面进行静态分析

相关设置

  • 设置sonarQube禁止非登录用户使用
  • 为用户生成token,Jenkins只能通过token与SonarQube集成
  • 登录SonarQube,进入个人设置页面中的Security tab页面进行设置
  • 在执行mvn命令时加入相应的sonar.login参数

maven项目依赖SonarQube

  • pom.xml中加入依赖

    <plugin>
    	<groupId>org.codehaus.mojo</groupId>
    	<artifactId>sonar-maven-plugin</artifactId>
    	<version>3.4.1.1168</version>
    </plugin>
    
  • 执行命令

    mvn clean org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1168:sonar -Dsonar.host.url=http://xxx:9000
    
  • sonar.host.url参数用于指定sonarQube服务的地址

Jenkins集成SonarQube

  1. 安装SonarQube Scanner插件
  2. 配置SonarQube Scanner插件
  3. 设置Webhooks,当分析完成时,由SonarQube主动通知Jenkins
    • 进入SonarQube
    • 选择Adminstration
    • Configuration
    • Webhooks页
    • 填写Jenkin的地址
  4. 在Jenkinsfile中加入sonarQube的stage
  5. 设置Quality Gates(质量阈值)

使用SonarQube提供的扫描工具(Scanner)进行代码扫描

  • 安装SonarQube Scanner插件
  • 设置扫描工具自动下载并安装,也可以手动安装后指定目录
  • 在代码项目根目录下放入sonar-project.properties文件,sonar-scanner会读取其配置
  • pipeline配置相关内容

SonarQube集成p3c

  1. 从Github下载p3c PMD插件,编译打包
  2. 将打包好的jar包放到SonarQube所在服务器的home/ext ensions/plugins目录下
  3. SonarQube
    1. 创建p3c profile
    2. 单击SonarQube里面的Quality Profiles
    3. 点击Create按钮
    4. 输入profile名称
    5. 选择java语言
    6. 在profile列表中找到刚刚创建的p3c profile
    7. 选择set as Default
  4. 为p3c profile激活p3c规则,新创建的profile是没有激活任何规则的,需要手动激活,点击activate More Rules
  5. 跳转到激活页面,激活所有的p3c规则
  6. 这样分析Java代码时,就会使用p3c规则了

将分析报告推送到GitLab

  1. 在SonarQube安装GitLab插件
  2. 配置SonarQube GitLab插件
  3. 为Sonar-scanner添加参数,告诉sonarQube将分析结果关联到GitLab的相应commit上
  4. 当sonarQube分析完成后,就可以在GitLab的相应commit页面上的代码行内或commit评论区看到分析结果了

更美观的测试报告

Allure测试报告

简述

  • 是一个框架,能将各种测试报告更美观的呈现出来

集成allure、Maven、Jenkins

  1. 安装Allure Jenkins插件
  2. 在pom.xml文件中加入依赖
  3. 在pom.xml文件中加入allure插件
  4. 在Jenkinsfile中的post阶段加入allure步骤
  5. 构建完成后,我们看到在构建历史中出现allure的logo
  6. 点击可在allure插件中查看测试报告