Java+Maven+TestNG+Jenkins - 部署篇
如果想要了解Maven项目的创建,TestNG的创建,请看上一篇:
Jenkins是基于Java开发的一种持续集成(CI),持续交付(CD),持续部署的开源工具。
本文介绍如何将Java + TestNG+Maven的项目在Jenkins上自动构建及部署。
1. 免费安装Jenkins
- 下载
jenkins.war
文件: https://www.jenkins.io/download/ - 打开终端,进入
jenkins.war
文件所在的路径,执行java -jar jenkins.war
命令,启动 Jenkins - 终端中显示 "Jenkins is fully up and running"时,说明Jenkins已经启动了,可以通过http://localhost:8080 来访问Jenkins
- 进入Jenkins之后,需要先解锁Jenkins
- 解锁成功之后就可以安装插件,可以选择安装建议安装的插件,或者先不安装,之后需要什么插件再安装也可
- 此时需要创建一个Admin账号,之后就可以通过创建的Admin账号来登录Jenkins
- 可以使用默认的URL来访问Jenkins,保存之后就可以进入Jenkins的首页
2. Jenkins的工作原理

当代码库有新的代码Push时 -> 对应代码库的webhook会通知Jenkins代码库有新的Push -> Jenkins通过SCM配置周期性的检查是否webhook有通知信息 -> 检测到通知信息后, Jenkins会访问代码库,获取最新的代码 -> Jenkins开始构建 -> 构建完成后调用Maven进行打包部署 -> 根据配置打印Log和发送邮件。
了解了Jenkins的工作原理之后,我们就需要对 Jenkins和Maven, GitHub, Webhook 进行配置。
3. 全局工具的配置
进入 Manage Jenkins -> Global Tool Configuration 进行全局工具的配置。因为Jenkins 自身采用 Java 开发,所以必须安装 JDK; 本文集成的项目基于 Maven,所以 Maven 也需要安装。
- JDK配置
JDK name - 可以自己定义;
JAVA_HOME - 选择JDK安装的HOME路径

- Maven配置
a. 如果没有安装Maven,首先需要下载 Maven,将下载好的包放自定义的路径下
b. 配置Maven的环境变量,先使用命令vi ~/.bash_profile
打开.bash_profile 文件,添加下边两行代码,然后执行source ~/.bash_profile
保存修改。
c. 输入mvn -v
查看Maven是否安装成功
d. 安装成功后,再在Jenkins配置,name 可以自定义,MAVEN_HOME 就是下载的Maven包存放的路径
export MAVEN_HOME=//Users/***/Documents/Workshop/java/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

4. GitHub和Jenkins关联的配置
Jenkins要构建代码需要访问GitHub,所以需要获得访问权限。需要生成GitHub的Personal access tokens,然后将这个Token配置在Jenkins里。
- 进入Github Setting -> Developer Settings -> Personal access tokens
- 点击 “Generate new token” 按钮,选择
repo
和admin:repo_hook
两个选项,生成一个token,复制生成的token后边会用到
- 进入Jenkins -> Manage Jenkins -> Configurate System -> GitHub, 添加一个GitHub Server。API URL 设置为: https://api.github.com; 添加一个 Credentials,如下图所示,填写 GitHub的Personal access tokens,添加成功后,在Credentials部分选择添加成功的这个Credentials。
- 这样Jenkins就可以访问你的GitHub了
5. Webhook和Jenkins关联的配置
GitHub的webhook可以提供一个push动作的钩子,每当你push成功的时候,会请求一个你指定的URL。Webhooks是GitHub提供的一个API,Webhooks可以在GitHub仓库发生事件(比如提交代码,创建分支,发布版本)时,通知到Jenkins服务器,执行部署脚本。
- Push 修改后的代码
- Webhook获取到修改后,发送请求给你的网站(Jenkins)服务器
- Jenkins服务器收到更新请求,执行自动部署脚本
- 自动部署脚本执行代码拉取,打包等动作完成更新部署
进入GitHub,进入要进行部署的代码仓库的Settings -> Webhooks -> Add Webhook, 填写内容如下图:

6. 创建Maven 项目
所有的全局配置结束后,就可以创建项目了。
选择页面的 “New Item” 按钮,此时进入的页面能看到很多Jenkin的不同项目的模板,如果模板列表里边没有Maven模板,就需要安装Maven插件。
- 进入Manage Jenkins -> manage plugins,在Available里边查找到
Maven Integration plugin
,进行安装,安装完成后需要重新启动Jenkins
-
再次点击 “New Item” 按钮们就可以看到Maven模板,自定义项目的名字,此名字是全局唯一的,如果重复,就会报错。选择Maven Project,点击OK,Maven项目就创建成功了
7. 配置 Maven 项目
1. General

a. Discard old builds Strategy
- 丢弃旧的构建, 服务器资源是有限的,保存太多的历史构建会导致Jenkins速度变慢,服务器硬盘资源也会被占满。所以可以设置"保留构建天数" 和 “保持构建的最大个数”,需要根据实际情况确定一个合理的值。
设置了10个,就能看到只保留了最近的10个构建结果。

b.
GitHub Project
- GitHub 项目,需要填写项目的URL,只需要填写仓库的地址,不需要填写clone 的 .git 地址c.
This project is parameterized
- 项目参数化,可以添加不同的参数。因为自动化需要运行testng.xml 文件,所以这里讲testng.xml 文件进行参数化讲解。首先: 在pom.xml文件中,指定xml文件名为变量
${xmlFileName}
,如下:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<suiteXmlFiles>
<!--suppress UnresolvedMavenProperty -->
<suiteXmlFile>${xmlFileName}</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
在回到Jenkins中,添加String parameter
,名字设定为pom.xml文件中的变量名 xmlFileName
,默认的值可以填写为真正需要执行的xml文件名,如下图:

保存之后,当手动trigger 构建的时候,会提示变量和变量的值,如果你需要修改执行不同的xml文件,也可以进行修改,再构建。

d.
Disable this project
- 禁用项目, 当选择了禁用项目,在首页这个项目就被禁用了,不能被Trigger
2. Source Code Management

根据不同的项目,选择不同的版本控制工具,我们的项目使用git。
a. Repositories
- 仓库部分需要填写项目的仓库地址,也就是clone时填写的地址,以及访问的凭证,也就是GitHub的账号和密码
b. Branches to build
- 所用的分支,你也可以修改不同的分支
c. Repository browser
- 所使用的代码仓库管理工具,使用GitHub,就选择githubweb
3. Build Triggers
a. Build whenever a snapshot dependency is built
- 当project依赖的快照版本被build时,执行本project
b. Build after other projects are built
- 当本project依赖的project被build时,执行本project
c. Build periodically
- 隔一段时间build一次,不管版本库代码是否发生变化,由时间控制
d. GitHub hook trigger for GITScm polling
- GitHub 上有新的代码提交时,会被触发。常用的构建触发器webhooks, 需要在GitHub上边配置。
e. Poll SCM
- 配合上面这个这个选项使用,当有代码提交时,Jenkins并不知道,所以需要周期性的去检查代码仓库是否发生改动,如果发生变动,就会自动Trigger。 例如: H/6 * * * *, 意思为6分钟去检查一次。
4. Build Environment
Delete workspace before build starts
Use secret text(s) or file(s)
Abort the build if it's stuck
- 根据执行的时间,如果时间执行的时间超过设定的时间,则将构建自动改为失败或者设置一些其他的描述。
Add timestamps to the Console Output
- 在Log 信息中添加了时间戳
8. 运行Jenkins查看测试报告
想要看GoCD部署的可以看这里:
Java+Maven+TestNG+GoCD - 部署篇