当前位置:   article > 正文

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

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)页面跳转后按页面提示步骤执行

  1. sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
  2. sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
  3. yum install fontconfig java-11-openjdk
  4. yum install jenkins
  1. [root@localhost jenkins]# sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
  2. --2023-02-21 19:08:40-- https://pkg.jenkins.io/redhat-stable/jenkins.repo
  3. Resolving pkg.jenkins.io (pkg.jenkins.io)... 151.101.2.133, 151.101.66.133, 151.101.130.133, ...
  4. Connecting to pkg.jenkins.io (pkg.jenkins.io)|151.101.2.133|:443... connected.
  5. ERROR: cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
  6. Issued certificate has expired.
  7. To connect to pkg.jenkins.io insecurely, use `--no-check-certificate'.
  8. [root@localhost jenkins]# sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
  9. --2023-02-21 19:09:52-- https://pkg.jenkins.io/redhat-stable/jenkins.repo
  10. Resolving pkg.jenkins.io (pkg.jenkins.io)... 151.101.2.133, 151.101.66.133, 151.101.130.133, ...
  11. Connecting to pkg.jenkins.io (pkg.jenkins.io)|151.101.2.133|:443... connected.
  12. WARNING: cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
  13. Issued certificate has expired.
  14. HTTP request sent, awaiting response... 200 OK
  15. Length: 85
  16. Saving to: ‘/etc/yum.repos.d/jenkins.repo’
  17. 100%[===================================================================================================================>] 85 --.-K/s in 0s
  18. 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 命令

  1. [root@localhost jenkins]# yum install fontconfig java-11-openjdk
  2. Loaded plugins: fastestmirror
  3. Loading mirror speeds from cached hostfile
  4. * base: mirrors.aliyun.com
  5. * extras: mirrors.aliyun.com
  6. * updates: mirrors.aliyun.com
  7. base | 3.6 kB 00:00:00
  8. extras | 2.9 kB 00:00:00
  9. jenkins | 2.9 kB 00:00:00
  10. updates | 2.9 kB 00:00:00
  11. updates/7/x86_64/primary_db | 19 MB 00:00:10
  12. Package fontconfig-2.13.0-4.3.el7.x86_64 already installed and latest version
  13. Resolving Dependencies
  14. --> Running transaction check
  15. ---> Package java-11-openjdk.x86_64 1:11.0.18.0.10-1.el7_9 will be installed
  16. --> 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
  17. --> Processing Dependency: xorg-x11-fonts-Type1 for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
  18. --> Processing Dependency: libjvm.so()(64bit) for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
  19. --> Processing Dependency: libjava.so()(64bit) for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
  20. --> Processing Dependency: libgif.so.4()(64bit) for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
  21. --> Running transaction check
  22. ---> Package giflib.x86_64 0:4.1.6-9.el7 will be installed
  23. ---> Package java-11-openjdk-headless.x86_64 1:11.0.18.0.10-1.el7_9 will be installed
  24. --> Processing Dependency: tzdata-java >= 2022g for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
  25. --> Processing Dependency: copy-jdk-configs >= 3.3 for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
  26. --> Processing Dependency: pcsc-lite-libs(x86-64) for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
  27. --> Processing Dependency: lksctp-tools(x86-64) for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
  28. --> Processing Dependency: javapackages-tools for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
  29. ---> Package xorg-x11-fonts-Type1.noarch 0:7.5-9.el7 will be installed
  30. --> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch
  31. --> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch
  32. --> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch
  33. --> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch
  34. --> Running transaction check
  35. ---> Package copy-jdk-configs.noarch 0:3.3-11.el7_9 will be installed
  36. ---> Package javapackages-tools.noarch 0:3.4.1-11.el7 will be installed
  37. --> Processing Dependency: python-javapackages = 3.4.1-11.el7 for package: javapackages-tools-3.4.1-11.el7.noarch
  38. ---> Package lksctp-tools.x86_64 0:1.0.17-2.el7 will be installed
  39. ---> Package pcsc-lite-libs.x86_64 0:1.8.8-8.el7 will be installed
  40. ---> Package ttmkfdir.x86_64 0:3.0.9-42.el7 will be installed
  41. ---> Package tzdata-java.noarch 0:2022g-1.el7 will be installed
  42. ---> Package xorg-x11-font-utils.x86_64 1:7.5-21.el7 will be installed
  43. --> Running transaction check
  44. ---> Package python-javapackages.noarch 0:3.4.1-11.el7 will be installed
  45. --> Processing Dependency: python-lxml for package: python-javapackages-3.4.1-11.el7.noarch
  46. --> Running transaction check
  47. ---> Package python-lxml.x86_64 0:3.2.1-4.el7 will be installed
  48. --> Finished Dependency Resolution
  49. Dependencies Resolved
  50. =============================================================================================================================================================
  51. Package Arch Version Repository Size
  52. =============================================================================================================================================================
  53. Installing:
  54. java-11-openjdk x86_64 1:11.0.18.0.10-1.el7_9 updates 239 k
  55. Installing for dependencies:
  56. copy-jdk-configs noarch 3.3-11.el7_9 updates 22 k
  57. giflib x86_64 4.1.6-9.el7 base 40 k
  58. java-11-openjdk-headless x86_64 1:11.0.18.0.10-1.el7_9 updates 39 M
  59. javapackages-tools noarch 3.4.1-11.el7 base 73 k
  60. lksctp-tools x86_64 1.0.17-2.el7 base 88 k
  61. pcsc-lite-libs x86_64 1.8.8-8.el7 base 34 k
  62. python-javapackages noarch 3.4.1-11.el7 base 31 k
  63. python-lxml x86_64 3.2.1-4.el7 base 758 k
  64. ttmkfdir x86_64 3.0.9-42.el7 base 48 k
  65. tzdata-java noarch 2022g-1.el7 updates 185 k
  66. xorg-x11-font-utils x86_64 1:7.5-21.el7 base 104 k
  67. xorg-x11-fonts-Type1 noarch 7.5-9.el7 base 521 k
  68. Transaction Summary
  69. =============================================================================================================================================================
  70. Install 1 Package (+12 Dependent packages)
  71. Total download size: 41 M
  72. Installed size: 169 M
  73. Is this ok [y/d/N]: y
  74. Downloading packages:
  75. (1/13): copy-jdk-configs-3.3-11.el7_9.noarch.rpm | 22 kB 00:00:00
  76. (2/13): giflib-4.1.6-9.el7.x86_64.rpm | 40 kB 00:00:00
  77. (3/13): javapackages-tools-3.4.1-11.el7.noarch.rpm | 73 kB 00:00:00
  78. (4/13): lksctp-tools-1.0.17-2.el7.x86_64.rpm | 88 kB 00:00:00
  79. (5/13): python-javapackages-3.4.1-11.el7.noarch.rpm | 31 kB 00:00:00
  80. (6/13): pcsc-lite-libs-1.8.8-8.el7.x86_64.rpm | 34 kB 00:00:00
  81. (7/13): java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64.rpm | 239 kB 00:00:01
  82. (8/13): ttmkfdir-3.0.9-42.el7.x86_64.rpm | 48 kB 00:00:00
  83. (9/13): tzdata-java-2022g-1.el7.noarch.rpm | 185 kB 00:00:00
  84. (10/13): python-lxml-3.2.1-4.el7.x86_64.rpm | 758 kB 00:00:00
  85. (11/13): xorg-x11-font-utils-7.5-21.el7.x86_64.rpm | 104 kB 00:00:00
  86. (12/13): xorg-x11-fonts-Type1-7.5-9.el7.noarch.rpm | 521 kB 00:00:02
  87. (13/13): java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64.rpm | 39 MB 00:01:12
  88. -------------------------------------------------------------------------------------------------------------------------------------------------------------
  89. Total 580 kB/s | 41 MB 00:01:12
  90. Running transaction check
  91. Running transaction test
  92. Transaction test succeeded
  93. Running transaction
  94. Warning: RPMDB altered outside of yum.
  95. Installing : ttmkfdir-3.0.9-42.el7.x86_64 1/13
  96. Installing : lksctp-tools-1.0.17-2.el7.x86_64 2/13
  97. Installing : copy-jdk-configs-3.3-11.el7_9.noarch 3/13
  98. Installing : pcsc-lite-libs-1.8.8-8.el7.x86_64 4/13
  99. Installing : tzdata-java-2022g-1.el7.noarch 5/13
  100. Installing : python-lxml-3.2.1-4.el7.x86_64 6/13
  101. Installing : python-javapackages-3.4.1-11.el7.noarch 7/13
  102. Installing : javapackages-tools-3.4.1-11.el7.noarch 8/13
  103. Installing : 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 9/13
  104. Installing : giflib-4.1.6-9.el7.x86_64 10/13
  105. Installing : 1:xorg-x11-font-utils-7.5-21.el7.x86_64 11/13
  106. Installing : xorg-x11-fonts-Type1-7.5-9.el7.noarch 12/13
  107. Installing : 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 13/13
  108. Verifying : 1:xorg-x11-font-utils-7.5-21.el7.x86_64 1/13
  109. Verifying : giflib-4.1.6-9.el7.x86_64 2/13
  110. Verifying : xorg-x11-fonts-Type1-7.5-9.el7.noarch 3/13
  111. Verifying : 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 4/13
  112. Verifying : python-javapackages-3.4.1-11.el7.noarch 5/13
  113. Verifying : python-lxml-3.2.1-4.el7.x86_64 6/13
  114. Verifying : tzdata-java-2022g-1.el7.noarch 7/13
  115. Verifying : pcsc-lite-libs-1.8.8-8.el7.x86_64 8/13
  116. Verifying : javapackages-tools-3.4.1-11.el7.noarch 9/13
  117. Verifying : 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 10/13
  118. Verifying : copy-jdk-configs-3.3-11.el7_9.noarch 11/13
  119. Verifying : lksctp-tools-1.0.17-2.el7.x86_64 12/13
  120. Verifying : ttmkfdir-3.0.9-42.el7.x86_64 13/13
  121. Installed:
  122. java-11-openjdk.x86_64 1:11.0.18.0.10-1.el7_9
  123. Dependency Installed:
  124. 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
  125. 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
  126. 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
  127. 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
  128. 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文件

  1. [root@localhost java]# cd /var/cache/
  2. [root@localhost cache]# mkdir jenkins
  3. [root@localhost cache]# cd /var/log
  4. [root@localhost log]# mkdir jenkins
  5. [root@localhost log]# cd /var/lib
  6. [root@localhost lib]# mkdir jenkins

(5)安装Jenkins yum install jenkins

  1. [root@localhost jenkins]# yum install jenkins
  2. Loaded plugins: fastestmirror
  3. Loading mirror speeds from cached hostfile
  4. * base: mirrors.aliyun.com
  5. * extras: mirrors.aliyun.com
  6. * updates: mirrors.aliyun.com
  7. Resolving Dependencies
  8. --> Running transaction check
  9. ---> Package jenkins.noarch 0:2.190.3-1.1 will be updated
  10. ---> Package jenkins.noarch 0:2.375.3-1.1 will be an update
  11. --> Finished Dependency Resolution
  12. Dependencies Resolved
  13. =============================================================================================================================================================
  14. Package Arch Version Repository Size
  15. =============================================================================================================================================================
  16. Updating:
  17. jenkins noarch 2.375.3-1.1 jenkins 90 M
  18. Transaction Summary
  19. =============================================================================================================================================================
  20. Upgrade 1 Package
  21. Total download size: 90 M
  22. Is this ok [y/d/N]: y
  23. Downloading packages:
  24. Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
  25. jenkins-2.375.3-1.1.noarch.rpm | 90 MB 00:07:40
  26. Running transaction check
  27. Running transaction test
  28. Transaction test succeeded
  29. Running transaction
  30. Updating : jenkins-2.375.3-1.1.noarch 1/2
  31. warning: /etc/init.d/jenkins created as /etc/init.d/jenkins.rpmnew
  32. warning: /etc/sysconfig/jenkins created as /etc/sysconfig/jenkins.rpmnew
  33. Cleanup : jenkins-2.190.3-1.1.noarch 2/2
  34. Verifying : jenkins-2.375.3-1.1.noarch 1/2
  35. Verifying : jenkins-2.190.3-1.1.noarch 2/2
  36. Updated:
  37. jenkins.noarch 0:2.375.3-1.1
  38. Complete!

(6)修改Jenkins配置文件

在启动之前对安装完毕的Jenkins进行默认配置的修改:

  • 默认情况下Jenkins使用Jenkins用户启动,但安装时并未创建用户也并未赋予权限,所以将启动用户修改为root

  • 默认端口为8080,常被占用,所以将默认端口也做一下修改。

  • vi /etc/sysconfig/jenkins

  1. JENKINS_USER="root" ## 原值 "jenkins" 必须修改,否则权限不足
  2. 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

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

2. Configure System

(1)Gitee配置

  • 在 链接名 中输入 Gitee 或者你想要的名字

  • Gitee 域名 URL 中输入码云完整 URL地址: https://gitee.com (码云私有化客户输入部署的域名)

  • 证书令牌 中如还未配置码云 APIV5 私人令牌,点击 Add - > Jenkins

  • Domain 选择 全局凭据

  • Kind 选择 Gitee API 令牌

  • Scope 选择你需要的范围

  • 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以下

  1. sudo service jenkins stop
  2. sudo service jenkins disable
  3. sudo yum -y remove jenkins
  4. sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins
  5. sudo rm -rf `sudo find /{etc,var,run} -name "jenkins*"`

2.centos7以上

  1. sudo systemctl stop jenkins
  2. sudo systemctl disable jenkins
  3. sudo yum -y remove jenkins
  4. sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins
  5. 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第二个*表示小时,取值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 Pipline流水线

采用Jenkins的自由风格构建项目时,每个步骤都要通过不同的方式进行配置,在构建过程中整体流程并不可见。利用Jenkins流水线进行项目从代码拉取、构建、测试、部署等步骤的构建时,相对于自由风格和其他风格更容易操作,流水线的构建过程中可以看到整体流程,也可看到每个流程花费的时间。

Jenkins的Pipline可以让项目的发布整体流程可视化,明确执行的阶段,整个项目的生命周期可以通过Jenkins文件管理,且Jenkins文件可以放在项目中维护。

1.Jenkinsfile实现

将脚本内容编写到项目中的Jenkins文件中,每次构建会自动拉取项目并获取项目中Jenkinsfile文件对项目进行构建。

(1)准备Jenkinsfile

将Jenkinsfile文件上传至项目中

Jenkinsfile基本语法

  1. // 所有脚本命令包含在pipeline{}中
  2. pipeline {
  3. // 指定任务在哪个节点执行(Jenkins支持分布式)
  4. agent any
  5. // 配置全局环境,指定变量名=变量值信息
  6. environment{
  7. host = 'ip'
  8. }
  9. // 存放所有任务的合集
  10. stages {
  11. // 单个任务
  12. stage('任务1') {
  13. // 实现任务的具体流程
  14. steps {
  15. echo 'do something'
  16. }
  17. }
  18. // 单个任务
  19. stage('任务2') {
  20. // 实现任务的具体流程
  21. steps {
  22. echo 'do something'
  23. }
  24. }
  25. // ……
  26. }
  27. }
  • 流水线语法自动生成

在配置流水线时,点击底部流水线语法,跳转页面后可选择具体需要实现的流程步骤,自动生成命令。

构建项目:

实现文件上传至远程服务器:

  • 示例:

可指定构建之前配置好的任务,也可通过流水线语法自动生成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>部分:

  1. </distributionManagement>
  2. <build>
  3. <finalName>ROOT</finalName>
  4. <plugins>
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-surefire-plugin</artifactId>
  8. <version>2.20.1</version>
  9. <configuration>
  10. <skipTests>false</skipTests>>
  11. </configuration>
  12. </plugin>
  13. </plugins>
  14. </build>
  15. </project>

若生成html报告,使用maven-surefire-report-plugin插件,生成的报告在target的site里面(surefire-report.html)

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-surefire-report-plugin</artifactId>
  4. <version>2.20.1</version>
  5. <configuration>
  6. <includes>
  7. <include>**/*Test.java</include>
  8. </includes>
  9. </configuration>
  10. </plugin>

maven-surefire-plugin和maven-surefire-report-plugin只需要配置其中一个,就会在test阶段执行单元测试用例。

2.Jenkins pipeline Job配置

pipeline的这部分应该放在post的always中,而不是stages段内。防止单元测试失败,pipeline不再执行后续的stage,放在post的always中则确保会执行。

Hop Jenkinsfile 示例

  1. post {
  2. always {
  3. junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
  4. junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
  5. }
  6. }

3.Jenkins 项目配置

增加构建后操作,添加Publish JUnit test result report

之后会在job页面显示单元测试的趋势图

hop单元测试结果趋势图

在Jenkins中也可查看失败的单元测试

(五)Jenkins持续代码质量检测

1.Maven与SonarQube集成

使用JUnit 4源码来做示例。将JUnit 4从GitHub克隆下来后,在pom.xml中加入SonarQube插件依赖。

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org . codehaus . mojo</ groupId>
  5. <artifactId>sonar-maven-plugin</artifactId>
  6. <version>3.4.1.1168< /version>
  7. </plugin>
  8. </plugins>
  9. </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

  1. pipeline {
  2. angent any
  3. tools {
  4. maven ' mvn- -3.5.4
  5. }
  6. stages {
  7. stage( 'Code Analysis') {
  8. steps {
  9. withSonarQubeEnv(' sonarqube') {
  10. sh """
  11. mvn clean package org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1168:sonar \
  12. -Dsonar.host.url=${SONAR_ HOST_ URL} \
  13. -Dsonar.login=${ SONAR_ AUTH_ TOKEN}
  14. """
  15. }
  16. }
  17. }
  18. stage("Quality Gate" ) {
  19. steps {
  20. timeout(time: 1, unit: 'HOURS') {
  21. waitForQualityGate abortPipeline: true
  22. }
  23. }
  24. }
  25. }
  26. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/130695
推荐阅读
相关标签
  

闽ICP备14008679号