0


Jenkins自动部署Maven项目详细教程

Jenkins自动化部署实现原理

一、Jenkins安装

下载地址:https://www.jenkins.io/download/

(一)windows环境安装

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.安装完成后,页面自动进入了管理员账户注册页面。

注册完账户,就进入主页面

(二)Linux在线安装

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.安装完成后,页面自动进入了管理员账户注册页面。

注册完账户,就进入主页面

(三)Jenkins系统配置

1.Global Tool Configuration

任务构建所用到的编译环境等配置,配置参考:

  1. 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即可。

(四)Jenkins卸载

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*"`

二、Jenkins使用

(一)拉取远程仓库代码到本地

(1)新建文件夹便于项目管理首页->新建Item->输入文件夹名称->选择文件夹->点击确定。

(2)在首页进入刚才新建的文件夹->新建Item->输入任务名称->选择Freestyle project->点击确定。

(3)页面会跳转到任务配置界面

General

源码管理

保存应用后,开始构建:

当看到控制台输出最近的提交记录,则代表代码成功被拉取到本地,Jenkins有自己的工作空间,拉取的代码就保存在工作空间内

(二)Jenkins编译部署项目

1.源码管理

代码拉取步骤与上一节一致。

2.构建触发器

常用构建触发器

(1)定时触发

  • 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个表示分钟,取值0~59第二个表示小时,取值023第三个*表示一个月的第几天,取值131第四个表示第几月,取值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 Pipline流水线

采用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

(四)Jenkins通过Junit插件在Jenkins中查看测试结果和趋势

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中也可查看失败的单元测试

(五)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”下,可以看到系统自带的质量阈值。它是针对新代码的。所以,在初次及没有新代码加入的情况下,执行代码分析是不会报出构建失败的。


本文转载自: https://blog.csdn.net/Ukulilion/article/details/129399033
版权归原作者 Ukulililion 所有, 如有侵权,请联系我们删除。

“Jenkins自动部署Maven项目详细教程”的评论:

还没有评论