赞
踩
下载地址:https://www.jenkins.io/download/
1.jenkins项目有两条发布线,分别是LTS长期支持版(或稳定版)和每周更新版(最新版)。建议选择LTS长期支持版,下载通用java项目war包。
2.下载jdk11以上版本并安装,安装后配置jdk的环境变量(最新版jdk弃用了jdk1.8,改用jdk11以上)。
3.在dos命令行运行命令解压war包:java -jar jenkins.war (默认情况下端口是8080,可通过命令行”java –jar Jenkins.war --httpPort=8083”的方式修改端口号)
运行命令后jenkins.war会自动在C盘目录下生成一个jenkins的文件夹。C盘下的这个文件夹可独立运行。
ps:运行完后不要关闭dos窗口,否则会访问不了Jenkins的页面。
4.在浏览器中访问jenkins项目:http://localhost:8083/jenkins 出现解锁 Jenkins界面,说明jenkins项目搭建完成,这里需要输入管理员密码。如下图:
5.上图中有提示:管理员密码在:C:\jenkins\secrets\initialAdminPassword 打开此文件获得密码并输入密码,点击”继续”按钮后如下图:
6.选择插件来安装,稍等几分钟安装完插件就可以使用Jenkins了。
部分插件下载失败不影响使用,今后需要用到的插件可在插件管理页面进行下载。
7.安装完成后,页面自动进入了管理员账户注册页面。
注册完账户,就进入主页面
1.官方文档安装
(1)选择下载CentOs版本
(2)页面跳转后按页面提示步骤执行
- sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
- sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
- yum install fontconfig java-11-openjdk
- yum install jenkins
[root@localhost jenkins]# sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --2023-02-21 19:08:40-- https://pkg.jenkins.io/redhat-stable/jenkins.repo Resolving pkg.jenkins.io (pkg.jenkins.io)... 151.101.2.133, 151.101.66.133, 151.101.130.133, ... Connecting to pkg.jenkins.io (pkg.jenkins.io)|151.101.2.133|:443... connected. ERROR: cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’: Issued certificate has expired. To connect to pkg.jenkins.io insecurely, use `--no-check-certificate'. [root@localhost jenkins]# sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate --2023-02-21 19:09:52-- https://pkg.jenkins.io/redhat-stable/jenkins.repo Resolving pkg.jenkins.io (pkg.jenkins.io)... 151.101.2.133, 151.101.66.133, 151.101.130.133, ... Connecting to pkg.jenkins.io (pkg.jenkins.io)|151.101.2.133|:443... connected. WARNING: cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’: Issued certificate has expired. HTTP request sent, awaiting response... 200 OK Length: 85 Saving to: ‘/etc/yum.repos.d/jenkins.repo’ 100%[===================================================================================================================>] 85 --.-K/s in 0s 2023-02-21 19:09:56 (4.73 MB/s) - ‘/etc/yum.repos.d/jenkins.repo’ saved [85/85]
系统中有jdk也需要执行 yum install fontconfig java-11-openjdk 命令
[root@localhost jenkins]# yum install fontconfig java-11-openjdk Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base | 3.6 kB 00:00:00 extras | 2.9 kB 00:00:00 jenkins | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 updates/7/x86_64/primary_db | 19 MB 00:00:10 Package fontconfig-2.13.0-4.3.el7.x86_64 already installed and latest version Resolving Dependencies --> Running transaction check ---> Package java-11-openjdk.x86_64 1:11.0.18.0.10-1.el7_9 will be installed --> Processing Dependency: java-11-openjdk-headless(x86-64) = 1:11.0.18.0.10-1.el7_9 for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 --> Processing Dependency: xorg-x11-fonts-Type1 for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 --> Processing Dependency: libjvm.so()(64bit) for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 --> Processing Dependency: libjava.so()(64bit) for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 --> Processing Dependency: libgif.so.4()(64bit) for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 --> Running transaction check ---> Package giflib.x86_64 0:4.1.6-9.el7 will be installed ---> Package java-11-openjdk-headless.x86_64 1:11.0.18.0.10-1.el7_9 will be installed --> Processing Dependency: tzdata-java >= 2022g for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 --> Processing Dependency: copy-jdk-configs >= 3.3 for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 --> Processing Dependency: pcsc-lite-libs(x86-64) for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 --> Processing Dependency: lksctp-tools(x86-64) for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 --> Processing Dependency: javapackages-tools for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 ---> Package xorg-x11-fonts-Type1.noarch 0:7.5-9.el7 will be installed --> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch --> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch --> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch --> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch --> Running transaction check ---> Package copy-jdk-configs.noarch 0:3.3-11.el7_9 will be installed ---> Package javapackages-tools.noarch 0:3.4.1-11.el7 will be installed --> Processing Dependency: python-javapackages = 3.4.1-11.el7 for package: javapackages-tools-3.4.1-11.el7.noarch ---> Package lksctp-tools.x86_64 0:1.0.17-2.el7 will be installed ---> Package pcsc-lite-libs.x86_64 0:1.8.8-8.el7 will be installed ---> Package ttmkfdir.x86_64 0:3.0.9-42.el7 will be installed ---> Package tzdata-java.noarch 0:2022g-1.el7 will be installed ---> Package xorg-x11-font-utils.x86_64 1:7.5-21.el7 will be installed --> Running transaction check ---> Package python-javapackages.noarch 0:3.4.1-11.el7 will be installed --> Processing Dependency: python-lxml for package: python-javapackages-3.4.1-11.el7.noarch --> Running transaction check ---> Package python-lxml.x86_64 0:3.2.1-4.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================= Package Arch Version Repository Size ============================================================================================================================================================= Installing: java-11-openjdk x86_64 1:11.0.18.0.10-1.el7_9 updates 239 k Installing for dependencies: copy-jdk-configs noarch 3.3-11.el7_9 updates 22 k giflib x86_64 4.1.6-9.el7 base 40 k java-11-openjdk-headless x86_64 1:11.0.18.0.10-1.el7_9 updates 39 M javapackages-tools noarch 3.4.1-11.el7 base 73 k lksctp-tools x86_64 1.0.17-2.el7 base 88 k pcsc-lite-libs x86_64 1.8.8-8.el7 base 34 k python-javapackages noarch 3.4.1-11.el7 base 31 k python-lxml x86_64 3.2.1-4.el7 base 758 k ttmkfdir x86_64 3.0.9-42.el7 base 48 k tzdata-java noarch 2022g-1.el7 updates 185 k xorg-x11-font-utils x86_64 1:7.5-21.el7 base 104 k xorg-x11-fonts-Type1 noarch 7.5-9.el7 base 521 k Transaction Summary ============================================================================================================================================================= Install 1 Package (+12 Dependent packages) Total download size: 41 M Installed size: 169 M Is this ok [y/d/N]: y Downloading packages: (1/13): copy-jdk-configs-3.3-11.el7_9.noarch.rpm | 22 kB 00:00:00 (2/13): giflib-4.1.6-9.el7.x86_64.rpm | 40 kB 00:00:00 (3/13): javapackages-tools-3.4.1-11.el7.noarch.rpm | 73 kB 00:00:00 (4/13): lksctp-tools-1.0.17-2.el7.x86_64.rpm | 88 kB 00:00:00 (5/13): python-javapackages-3.4.1-11.el7.noarch.rpm | 31 kB 00:00:00 (6/13): pcsc-lite-libs-1.8.8-8.el7.x86_64.rpm | 34 kB 00:00:00 (7/13): java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64.rpm | 239 kB 00:00:01 (8/13): ttmkfdir-3.0.9-42.el7.x86_64.rpm | 48 kB 00:00:00 (9/13): tzdata-java-2022g-1.el7.noarch.rpm | 185 kB 00:00:00 (10/13): python-lxml-3.2.1-4.el7.x86_64.rpm | 758 kB 00:00:00 (11/13): xorg-x11-font-utils-7.5-21.el7.x86_64.rpm | 104 kB 00:00:00 (12/13): xorg-x11-fonts-Type1-7.5-9.el7.noarch.rpm | 521 kB 00:00:02 (13/13): java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64.rpm | 39 MB 00:01:12 ------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 580 kB/s | 41 MB 00:01:12 Running transaction check Running transaction test Transaction test succeeded Running transaction Warning: RPMDB altered outside of yum. Installing : ttmkfdir-3.0.9-42.el7.x86_64 1/13 Installing : lksctp-tools-1.0.17-2.el7.x86_64 2/13 Installing : copy-jdk-configs-3.3-11.el7_9.noarch 3/13 Installing : pcsc-lite-libs-1.8.8-8.el7.x86_64 4/13 Installing : tzdata-java-2022g-1.el7.noarch 5/13 Installing : python-lxml-3.2.1-4.el7.x86_64 6/13 Installing : python-javapackages-3.4.1-11.el7.noarch 7/13 Installing : javapackages-tools-3.4.1-11.el7.noarch 8/13 Installing : 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 9/13 Installing : giflib-4.1.6-9.el7.x86_64 10/13 Installing : 1:xorg-x11-font-utils-7.5-21.el7.x86_64 11/13 Installing : xorg-x11-fonts-Type1-7.5-9.el7.noarch 12/13 Installing : 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 13/13 Verifying : 1:xorg-x11-font-utils-7.5-21.el7.x86_64 1/13 Verifying : giflib-4.1.6-9.el7.x86_64 2/13 Verifying : xorg-x11-fonts-Type1-7.5-9.el7.noarch 3/13 Verifying : 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 4/13 Verifying : python-javapackages-3.4.1-11.el7.noarch 5/13 Verifying : python-lxml-3.2.1-4.el7.x86_64 6/13 Verifying : tzdata-java-2022g-1.el7.noarch 7/13 Verifying : pcsc-lite-libs-1.8.8-8.el7.x86_64 8/13 Verifying : javapackages-tools-3.4.1-11.el7.noarch 9/13 Verifying : 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 10/13 Verifying : copy-jdk-configs-3.3-11.el7_9.noarch 11/13 Verifying : lksctp-tools-1.0.17-2.el7.x86_64 12/13 Verifying : ttmkfdir-3.0.9-42.el7.x86_64 13/13 Installed: java-11-openjdk.x86_64 1:11.0.18.0.10-1.el7_9 Dependency Installed: copy-jdk-configs.noarch 0:3.3-11.el7_9 giflib.x86_64 0:4.1.6-9.el7 java-11-openjdk-headless.x86_64 1:11.0.18.0.10-1.el7_9 javapackages-tools.noarch 0:3.4.1-11.el7 lksctp-tools.x86_64 0:1.0.17-2.el7 pcsc-lite-libs.x86_64 0:1.8.8-8.el7 python-javapackages.noarch 0:3.4.1-11.el7 python-lxml.x86_64 0:3.2.1-4.el7 ttmkfdir.x86_64 0:3.0.9-42.el7 tzdata-java.noarch 0:2022g-1.el7 xorg-x11-font-utils.x86_64 1:7.5-21.el7 xorg-x11-fonts-Type1.noarch 0:7.5-9.el7 Complete!
(3)将Jenkins存储库添加到系统中
[root@localhost jenkins]# sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
(4)创建Jenkins安装时所需的文件目录
安装之前先准备创建Jenkins安装时所需的文件目录,否则会导致安装后启动失败。
分别在 /var/cache/ /var/log/ /var/lib/ 下创建jenkins文件
- [root@localhost java]# cd /var/cache/
- [root@localhost cache]# mkdir jenkins
- [root@localhost cache]# cd /var/log
- [root@localhost log]# mkdir jenkins
- [root@localhost log]# cd /var/lib
- [root@localhost lib]# mkdir jenkins
(5)安装Jenkins yum install jenkins
[root@localhost jenkins]# yum install jenkins Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package jenkins.noarch 0:2.190.3-1.1 will be updated ---> Package jenkins.noarch 0:2.375.3-1.1 will be an update --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================= Package Arch Version Repository Size ============================================================================================================================================================= Updating: jenkins noarch 2.375.3-1.1 jenkins 90 M Transaction Summary ============================================================================================================================================================= Upgrade 1 Package Total download size: 90 M Is this ok [y/d/N]: y Downloading packages: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. jenkins-2.375.3-1.1.noarch.rpm | 90 MB 00:07:40 Running transaction check Running transaction test Transaction test succeeded Running transaction Updating : jenkins-2.375.3-1.1.noarch 1/2 warning: /etc/init.d/jenkins created as /etc/init.d/jenkins.rpmnew warning: /etc/sysconfig/jenkins created as /etc/sysconfig/jenkins.rpmnew Cleanup : jenkins-2.190.3-1.1.noarch 2/2 Verifying : jenkins-2.375.3-1.1.noarch 1/2 Verifying : jenkins-2.190.3-1.1.noarch 2/2 Updated: jenkins.noarch 0:2.375.3-1.1 Complete!
(6)修改Jenkins配置文件
在启动之前对安装完毕的Jenkins进行默认配置的修改:
默认情况下Jenkins使用Jenkins用户启动,但安装时并未创建用户也并未赋予权限,所以将启动用户修改为root
默认端口为8080,常被占用,所以将默认端口也做一下修改。
vi /etc/sysconfig/jenkins
- JENKINS_USER="root" ## 原值 "jenkins" 必须修改,否则权限不足
- JENKINS_PORT="8083" ## 原值 "8080"
(7)启动Jenkins
4.在浏览器中访问jenkins项目:http://server_ip:8083/jenkins 出现解锁 Jenkins界面,说明jenkins项目搭建完成,这里需要输入管理员密码。如下图:
5.上图中有提示:管理员密码在:/var/lib/jenkins/secrets/initialAdminPassword 打开此文件获得密码并输入密码,点击”继续”按钮后如下图:
6.选择插件来安装,稍等几分钟安装完插件就可以使用Jenkins了。
部分插件下载失败不影响使用,今后需要用到的插件可在插件管理页面进行下载。
7.安装完成后,页面自动进入了管理员账户注册页面。
注册完账户,就进入主页面
1.Global Tool Configuration
任务构建所用到的编译环境等配置,配置参考:
2. Configure System
(1)Gitee配置
在 链接名 中输入 Gitee 或者你想要的名字
Gitee 域名 URL 中输入码云完整 URL地址: https://gitee.com (码云私有化客户输入部署的域名)
证书令牌 中如还未配置码云 APIV5 私人令牌,点击 Add - > Jenkins
Domain 选择 全局凭据
Kind 选择 Gitee API 令牌
Scope 选择你需要的范围
Gitee API Token 输入你的码云私人令牌,获取地址:https://gitee.com/profile/personal_access_tokens
ID, Descripiton 中输入你想要的 ID 和描述即可。
Gitee链接配置保存后,创建新任务配置Gitee链接时在下拉框中选择此任务所需的Gitee链接即可。
(2)SSH Server
接收文件的远程服务器配置
3.windows环境下更改默认工作空间
增加环境变量JENKINS_HOME,指向想要更改的Jenkins默认工作空间。比如,设置E:\jenkins为Jenkins的默认工作目录,那么在环境变量中,设置JENKINS_HOME为E:\jenkins。
再重启jenkin即可。
1.centos7以下
- sudo service jenkins stop
- sudo service jenkins disable
- sudo yum -y remove jenkins
- sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins
- sudo rm -rf `sudo find /{etc,var,run} -name "jenkins*"`
2.centos7以上
- sudo systemctl stop jenkins
- sudo systemctl disable jenkins
- sudo yum -y remove jenkins
- sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins
- sudo rm -rf `sudo find /{etc,var,run} -name "jenkins*"`
(1)新建文件夹便于项目管理首页->新建Item->输入文件夹名称->选择文件夹->点击确定。
(2)在首页进入刚才新建的文件夹->新建Item->输入任务名称->选择Freestyle project->点击确定。
(3)页面会跳转到任务配置界面
General
源码管理
保存应用后,开始构建:
当看到控制台输出最近的提交记录,则代表代码成功被拉取到本地,Jenkins有自己的工作空间,拉取的代码就保存在工作空间内
1.源码管理
代码拉取步骤与上一节一致。
2.构建触发器
常用构建触发器
(1)定时触发
定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月的第几天,取值1~31第四个*表示第几月,取值1~12第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
常用定时构建举例:
每5分钟构建一次:H/5 * * * *每15分钟运行一次:H/15 * * * *每30分钟构建一次:H/30 * * * *每2小时构建一次:H H/2 * * *每天早上8点构建一次:0 8 * * *每天中午下班前定时构建一次:0 12 * * *每天下午下班前定时构建一次:0 18 * * *每天的8点,12点,22点,一天构建3次:0 8,12,22 * * *一个小时的前30分钟,每10分钟运行一次 (30分钟, 可能在 4分,14分,24分):H(0-29)/10 * * * *每周一至周五,上午9:45到下午3:45,每隔2小时45分钟运行一次:45 9-15/2 * * 1-5每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38):H H(9-17)/2 * * 1-5除12月外,每月1号和15号每天一次:H H 1,15 1-11 *
Build periodically
任务周期性进行项目构建,到达指定的时间必须触发构建任务(无论源码数据有无变化,均执行定时化的构建),若朝九晚五各构建一次,在Build periodically里设置如下
Poll SCM
定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作(定时轮询SVN,查看SVN中是否有数据变化,如果有变化,则执行构建任务)若想每隔30分钟检查一次源码变化,有变化就执行,在poll SCM里设置如下
webhook触发
构建触发器:
Gitee 配置
对内网进行映射
添加成功后会自动产生一个请求,状态码为200即为成功。
添加成功,提交代码后webhook触发Jenkins自动构建
3.构建步骤
打包项目
4.构建后步骤
将打包编译好的项目发送至远程服务器
应用并保存后开始构建,可在构建完成后,在控制台输出查看结果
文件成功发送到远程服务器
采用Jenkins的自由风格构建项目时,每个步骤都要通过不同的方式进行配置,在构建过程中整体流程并不可见。利用Jenkins流水线进行项目从代码拉取、构建、测试、部署等步骤的构建时,相对于自由风格和其他风格更容易操作,流水线的构建过程中可以看到整体流程,也可看到每个流程花费的时间。
Jenkins的Pipline可以让项目的发布整体流程可视化,明确执行的阶段,整个项目的生命周期可以通过Jenkins文件管理,且Jenkins文件可以放在项目中维护。
1.Jenkinsfile实现
将脚本内容编写到项目中的Jenkins文件中,每次构建会自动拉取项目并获取项目中Jenkinsfile文件对项目进行构建。
(1)准备Jenkinsfile
将Jenkinsfile文件上传至项目中
Jenkinsfile基本语法
// 所有脚本命令包含在pipeline{}中 pipeline { // 指定任务在哪个节点执行(Jenkins支持分布式) agent any // 配置全局环境,指定变量名=变量值信息 environment{ host = 'ip' } // 存放所有任务的合集 stages { // 单个任务 stage('任务1') { // 实现任务的具体流程 steps { echo 'do something' } } // 单个任务 stage('任务2') { // 实现任务的具体流程 steps { echo 'do something' } } // …… } }
流水线语法自动生成
在配置流水线时,点击底部流水线语法,跳转页面后可选择具体需要实现的流程步骤,自动生成命令。
构建项目:
实现文件上传至远程服务器:
示例:
可指定构建之前配置好的任务,也可通过流水线语法自动生成Groovy脚本在Jenkinsfile中配置。
Jenkins流水线是一种以定义的方式依次执行Jenkins作业的方法,方法是将其编码并在多个块中进行结构化,这些块可以包含多个任务步骤:
(2)配置Pipline
1.生成报告
Jenkins中安装Junit插件
生成xml报告需要使用maven插件
只需要生成.xml、txt报告,使用maven-surefire-plugin插件,生成的报告在target的surefire-reports下
在项目的pom.xml中加载插件如下<plugins> </plugins>部分:
- </distributionManagement>
- <build>
- <finalName>ROOT</finalName>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.20.1</version>
- <configuration>
- <skipTests>false</skipTests>>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
若生成html报告,使用maven-surefire-report-plugin插件,生成的报告在target的site里面(surefire-report.html)
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-report-plugin</artifactId>
- <version>2.20.1</version>
- <configuration>
- <includes>
- <include>**/*Test.java</include>
- </includes>
- </configuration>
- </plugin>
maven-surefire-plugin和maven-surefire-report-plugin只需要配置其中一个,就会在test阶段执行单元测试用例。
2.Jenkins pipeline Job配置
pipeline的这部分应该放在post的always中,而不是stages段内。防止单元测试失败,pipeline不再执行后续的stage,放在post的always中则确保会执行。
Hop Jenkinsfile 示例
- post {
- always {
- junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
- junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
- }
- }
3.Jenkins 项目配置
增加构建后操作,添加Publish JUnit test result report
之后会在job页面显示单元测试的趋势图
hop单元测试结果趋势图
在Jenkins中也可查看失败的单元测试
1.Maven与SonarQube集成
使用JUnit 4源码来做示例。将JUnit 4从GitHub克隆下来后,在pom.xml中加入SonarQube插件依赖。
- <build>
- <plugins>
- <plugin>
- <groupId>org . codehaus . mojo</ groupId>
- <artifactId>sonar-maven-plugin</artifactId>
- <version>3.4.1.1168< /version>
- </plugin>
- </plugins>
- </build>
执行命令:mvn clean org.sonarsource.scanner.maven
3.4.1.1168:sonar -Dsonar.host.url=http://127.0.0.1:9000
sonar.host.url参数用于指定SonarQube服务的地址。这时,就可以在SonarQube的”Projects” 中看到JUnit 4的分析结果,可以看到JUnit 4有11个Bug。
SonarQube服务默认允许任何人执行源码分析,因此在生产环境中使用会有安全隐患,以下几步可以提高其安全性:(1)设置SonarQube禁止非登录用户使用
(2)为用户生成Token,Jenkins只能通过Token与SonarQube集成。登陆SonarQube,进入个人设置页面中的Security tab页
2Jenkins与SonarQube集成
(1)Jenkins安装SonarQube Scanner插件
(2)Jenkins配置SonarQube Scanner插件
(3)SonarQube设置Webhooks,不同代码规模的源码,分析过程的耗时是不一样的。所以当分析完成时,由SonarQube主动通知Jenkins。设置方法就是进入SonarQube的Adminstration -》Configuration -》 Webhooks页 ,加入http://jenkins地址/sonarqube-webhook 这个接口地址由SonarQube插件提供
(4)在Jenkinsfile中加入SonarQube的stage
pipeline { angent any tools { maven ' mvn- -3.5.4 } stages { stage( 'Code Analysis') { steps { withSonarQubeEnv(' sonarqube') { sh """ mvn clean package org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1168:sonar \ -Dsonar.host.url=${SONAR_ HOST_ URL} \ -Dsonar.login=${ SONAR_ AUTH_ TOKEN} """ } } } stage("Quality Gate" ) { steps { timeout(time: 1, unit: 'HOURS') { waitForQualityGate abortPipeline: true } } } } }
withSonarQubeEnv是一个环境变量包装器,读取的是配置的变量。在它的闭包内,可以使用以下变量。
SONAR_HOST_URL : SonarQube服务的地址
SONAR_AUTH_TOKEN : SonarQube认证所需要的Token
waitForQualityGate步骤告诉Jenkins等待SonarQube返回的分析结果。当它的abortPipeline参数为true时,代表当质量不合格,将pipeline的状态设置为UNSTABLE。
同时使用了timeout包装器来设置waitForQualityGate步骤的超时时间,避免当网络出问题时, Jenkins任务-直处于等待状态。
(5)设置Quality Gates(质量阈值)。 在SonarQube的”Quality Gates”下,可以看到系统自带的质量阈值。它是针对新代码的。所以,在初次及没有新代码加入的情况下,执行代码分析是不会报出构建失败的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。