jenkins操作手册——巨详细,一篇足矣

一、持续集成相关概念

1.1、什么是持续集成?

随着软件开发复杂度的不断提高,团队开发成员间如何更好的协同工作以确保软件开发的质量已经成为开发过程中不可回避的问题。尤其是近年来敏捷开发在软件领域越来越火,如何能在不间断变化的需求中快速适应和保证软件的质量显得尤其重要。持续集成正是针对这一问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能更快的开发内聚的软件。

1.2、持续集成的原则

  • 需要版本控制工具来保障团队成员提交的代码不会导致集成失败。常用的版本控制工具有cvs、subversion、git、sourcesafe等;
  • 开发人员需要及时向版本控制库中提交代码,也需要经常性地从版本控制库中更新代码到本地;
  • 需要有专门的集成服务器来执行集成构建。根据项目的实际情况,集成构建可以通过代码仓库中代码的变动(如push事件、merge事件等)来自动触发构建,也可以定时启动构建,如每半小时构建一次;
  • 必须保证构建的成功。如果构建失败,则修复构建过程中的错误将是优先级最高的工作。一旦修复,需手动启动一次构建。
  • 一个自动构建过程,包括自动编译、分发、部署和测试等;
  • 一个代码仓库,即需要版本控制工具来保障代码的可维护性,同时作为构建过程的素材库;
  • 一个持续集成服务器。即将介绍的Jenkins就是一个配置简单和使用方便的持续集成服务器。

1.3、持续集成系统的组成

二、Jenkins简介和插件

2.1、Jenkins简介

Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更重要的业务逻辑实现上。同时Jenkins能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象的展示项目构建的趋势和稳定性。

2.2、插件介绍

Jenkins提供了大量的插件,这些插件使Jenkins能实现很多复杂的功能。下面列出了部分持续集成所需的插件:

  • Email Extension Plugin,邮件通知插件。例如,构建失败或成功后可以发送相关信息到指定的邮箱;
  • Publish Over SSH ,用于远程服务器发布,将编译生成的jar、war等文件推送到远程服务器中指定的目录;
  • Maven Integration plugin ,Maven集成插件,缺少此插件则新建任务时没有Maven Project选项;
  • GitLab,用于从指定的代码仓库中拉取需要构建的代码;
  • Sonar scanner,用于构建前或构建后对代码进行扫描;
  • Git parameter,基于Git的参数化构建;
  • HTML Publisher plugin,用于在Jenkins中配置HTML格式的报告;
  • Groovy Label Assignment plugin,用于执行Groovy代码;
  • NodeJS plugin,配置JavaScript的运行环境,作为前端代码的打包工具或构建工具;

2.3、插件安装

安装插件的步骤:在面板界面左侧的导航栏中选择Manager Jenkins ---> System Configuration ---> Manager Plugins,在插件管理页面中点击“可选插件”选项卡,然后在输入框中填写需要安装的插件名字。

三、全局工具配置

全局工具配置主要对一些常用工具的名称、版本、路径和配置文件进行设定。在面板左侧的导航栏中点击“系统管理”,进入到“管理Jenkins”界面,选择界面中的System Configuration ---> Global Tool Configuration后进入到“全局工具配置”界面,依次对Maven配置、JDK、Git、Maven、NodeJS、Sonar Scanner等进行配置。

3.1、Maven配置

主要用于Maven的主配置文件settings.xml的设定。settings.xml包含仓库镜像、本地镜像和认证信息等。一般默认的路径有两种:Global Maven Settings --- ${M2_HOME}/conf/settings.xml;User Maven Settings --- ${user.HOME}/.m2/settings.xml。如果两个文件都存在,会对内容进行合并,优先应用当前目录下settings.xml中的设定。

 

jenkins操作手册——巨详细,一篇足矣_第1张图片

3.2、JDK

如果已经安装过JDK,这里需要配置JDK的JAVA_HOME。

jenkins操作手册——巨详细,一篇足矣_第2张图片

3.3、Git

Git的配置也很重要,因为大多数的任务都要获取Git仓库中的代码,所以这里需要配置Git的执行路径。

 

jenkins操作手册——巨详细,一篇足矣_第3张图片

3.4、Maven

主要用于配置Maven的主目录,可以添加多个,用Name来区分。如果系统中已经安装Maven,这里直接填写MAVEN_HOME对应的路径,Jenkins会在Master节点上进行检查,查看该目录是否有效。

 

jenkins操作手册——巨详细,一篇足矣_第4张图片

3.5、SonarQube Scanner

SonarQube Scanner用于代码的静态质量扫描,可以自动安装,也可以手动将其安装在Master服务器上。这里采用的是自动安装,在“版本”下拉选框中选择所要安装的版本号即可。

jenkins操作手册——巨详细,一篇足矣_第5张图片

3.6、NodeJS

NodeJS是一个JavaScript的运行环境,作为打包工具或者构建工具。如果要在Jenkins中实现编译、打包前端代码,则需要安装此软件。

 

jenkins操作手册——巨详细,一篇足矣_第6张图片

四、系统配置

在Jenkins主面板左侧的导航栏中选择“系统管理”,进入到“管理Jenkins”界面,点击此界面中“系统配置”模块下的“系统配置”选项,进入到“配置”界面。

4.1、Jenkins Location

此项是可选的,指定安装Jenkins的HTTP地址。这个值用来在邮件中生产Jenkins链接。此项是有必要的,因为Jenkins无法探测到自己的URL地址。

jenkins操作手册——巨详细,一篇足矣_第7张图片

4.2、SonarQube servers

配置SonarQube所在服务器的信息,建立Jenkins和SonarQube之间的通信。

Name自定义一个适合的名字;

Server URLSonarQube所在服务器的URL(IP或域名加端口,端口号默认为9000);

Server authentication token这里填写SonarQube服务器当前用户的令牌。

jenkins操作手册——巨详细,一篇足矣_第8张图片

SonarQube令牌的生成方法:登陆SonarQube服务器,选择“头像”--->“我的账号”--->“安全”--->在“生成令牌”文本框中输入自定义的名称,然后点击“生成”按钮。生成的令牌ID只会显示一次,所以如果有需要,可以进行备份

jenkins操作手册——巨详细,一篇足矣_第9张图片

生成SonarQube当前用户的令牌ID后,回到Jenkins的系统配置界面,并定位到“SonarQube servers”模块,点击“Server authentication token”选项的“添加”按钮,选择“Jenkins”,进入到“添加凭据”窗口。

jenkins操作手册——巨详细,一篇足矣_第10张图片

类型:选择Secret text;

Secret填入SonarQube当前用户生成的令牌ID;

ID自定义一个名称。

填写完毕后,点击“添加”按钮,然后在“Server authentication token”的下拉选框中选择相应的凭据即可。

4.3、GitLab

配置将要构建的代码所在的GitLab服务器信息,建立Jenkins和GitLab服务器之间的通信。

jenkins操作手册——巨详细,一篇足矣_第11张图片

Connection name自定义一个名称;

Gitlab host URLGItLab所在服务器的HTTP地址;

Credentials添加GitLab API token,该token由GItLab生成。

GitLab API token的生成方法:进入GitLab主页,点击页面右上角的头像,在出现的悬框中点击“Settings”,进入到设置界面。在设置界面左侧的导航栏中点击“Access Token”,进入“Access Token”界面。

jenkins操作手册——巨详细,一篇足矣_第12张图片

Name自定义一个名称;

Expires at添加生成token的时间(非必填项);

Scopes勾选api复选框;

Create personal access token点击此按钮后会生成一个token,且生成的token会展示在“Active Personal Access Tokens”列表中。

生成GitLab API token后,回到Jenkins的系统配置界面,并定位到GitLab模块。点击Credentials的“添加”按钮,选择“jenkins”,进入到“添加凭据”窗口。

jenkins操作手册——巨详细,一篇足矣_第13张图片

类型:选择GitLab API token;

API token填入在GitLab中生成的API token;

ID自定义一个名称(非必填项)。

所需的信息配置完毕后,点击“Test Connection”按钮,测试Jenkins和GitLab之间的连接是否成功。

jenkins操作手册——巨详细,一篇足矣_第14张图片

4.4、Publish over SSH

若要将构建后生成的jar包(后端)或dist目录文件(前端)推送到远程服务器中,需配置此模块。在此我们选择用户名和密码来连接远程服务器。

jenkins操作手册——巨详细,一篇足矣_第15张图片

Name自定义一个名称。在Job中使用Publish over SSH插件时,此名称将出现在“SSH Server”中“Name”选项的下拉列表中;

Hostname服务器的主机名或IP地址;

Username服务器的用户名;

Remote Directory远程服务器上真实存在的目录,而且“Username”指定的用户要有访问此文件夹的权限,插件将把文件推送到此目录下;

Use password authentication, or use a different key勾选此选项,并在“Passphrase / Password”中输入与Username匹配的密码。

配置完后点击“Test Configuration”,测试是否可以连接成功。

 

jenkins操作手册——巨详细,一篇足矣_第16张图片

4.5、Extended E-mail Notification

在Jenkins的使用中邮件提醒是一个常用功能,Jenkins默认安装了 Mailer Plugin插件用于实现此功能,但 Mailer Plugin功能简单不能满足一些复杂需求,如:自定义邮件标题、内容等。Extended E-mail Notification(ext mail)是一个功能更为齐全,使用也更为复杂的插件。下面对此插件的配置做简要的说明。

 

jenkins操作手册——巨详细,一篇足矣_第17张图片

jenkins操作手册——巨详细,一篇足矣_第18张图片

SMTP ServerSMTP服务器的地址;

SMPT PortSMTP的端口号,默认为25;

SMTP Username即在Jenkins Location模块中填写的“系统管理员邮件地址”;

SMTP Password“系统管理员邮件地址”所对应的密码;

Default user E-mail suffix默认的邮箱后缀;

Default Content Type默认的邮件内容格式;

Default Recipients默认收件人的邮箱地址(可填写多个,中间用英文逗号隔开即可);

Default Subject邮件标题。例如,$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!。其中,$PROJECT_NAME为构建项目名称,$BUILD_NUMBER为构建编号,$BUILD_STATUS为构建状态;

Default Content:邮件内容;

 1   
 2   
 3   
 4   
 5 ${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志  
 6   
 7    
 8   
10       
12           
13               
14           
15           
16               
19           
20           
21               
24           
25           
26               
38           
39           
40               
43           
44           
45               
50           
51           
52               
54           
55           
56               
58           
59           
60               
62           
63           
70           
71             
(本邮件由Jenkins系统自动发布,请勿回复!)

17 构建结果 - ${BUILD_STATUS} 18


22 构建信息 23
27 37
Changes Since Last 41 Successful Build: 42
46 ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:
%c
",showPaths=true,changesFormat="
[%a]
%m
",pathFormat=" %p"} 49
Failed Test Results 53
$FAILED_TESTS
57
构建日志 (最后 100行): 61