开发前的准备
本人安装的是依赖于tomcat运行的Jenkins
1、CentOS7 安装Jenkins,链接
2、※为服务器的tomcat配置一个账户密码,用于Jenkins访问tomcat
vim /usr/local/apache-tomcat-9.0.20/conf/tomcat-users.xml
在 <tomcat-users></tomcat-users> 标签内加入
<!-- 2020-07-26 soldier --> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="tomcat_user" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
解决tomcat8.5版本之后配置用户后,访问的ip限制问题:
vim /usr/local/apache-tomcat-9.0.20/webapps/manager/META-INF/context.xml
将 127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1 修改为
127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+
一、Jenkins+SVN 持续集成环境搭建
本人环境配置为:Ubuntu 18.04 + IDEA 2018.3 + JDK 1.8 + Maven 3.6.1 + SVN,SVN的安装可参考:链接
1.1 本地使用idea创建一个maven webapp项目
1.2 服务器搭建Subversion
- 创建svn版本库
mkdir -p /var/svn/repository chmod -R 777 /var/svn/
- 安装svn
yum -y install subversion
- 创建项目仓库
cd /var/svn/repository mkdir jenkins-test svnadmin create jenkins-test
- 修改配置文件,设置当前版本库权限
vim /var/svn/repository/jenkins-test/conf/svnserve.conf
修改为:
- 设置当前版本库账号
vim /var/svn/repository/jenkins-test/conf/passwd
修改为:
-
设置当前版本库的subman账号有读写权限,其它账号没有权限
vim /var/svn/repository/jenkins-test/conf/authz
修改为:
- 启动svn服务端
svnserve -d -r /var/svn/repository
-d 以守护进程的方式后台启动程序
-r 指定启动使用的仓库地址 这样客户端不用输入全路径,就可以访问版本库
可以使用 svn co svn://127.0.0.1/jenkins-test 命令测试一下
- 关闭svn服务端
# 查看svn的进程id ps aux | grep svn # 杀死进程 kill -9 进程id
1.3 将ubuntu18.04本地项目提交到Subversion服务器
- 查看svn资源库
- 弹出一个svn的窗口,在左边有加号可以添加一个svn的库
-
点击”+”号,添加SVN资源库,URL地址输入您创建的版本库地址,我们这里输入:svn://121.37.4.145/jenkins-test
之后idea会弹窗让我们输入用户名(subman)和密码(123123)
- 找到我们创建的Maven工程,右键 ->Subversion -> Share Directory
- 弹出如下图,进行选中
- 点击 Share,弹出以下界面,默认勾中 1.8 format
- 点击 OK,如果成功,弹出以下界面
- 刷新SVN Respositories,弹出以下界面
- 然后返回,选中工程右键 ->Subversion -> Commit Directory…
-
点击Commit,提交成功,查看SVN服务器,代码已提交成功
1.4 Jenkins客户端创建工程并配置源码部署
- 点击新建任务,勾选和输入如下值:
- 点击确定,点击【源码管理】,输入如下值点击【保存】
- 点击左边的【配置】,选择【构建环境】
- 下拉到【构建后操作】,点击添加选择【Deploy war/ear to a container】
- 点击【立即构建】
点击 #1 旁边的下三角,可以查看控制台输出,第一次构建的时间会比较长,下一次就不会了 - 即可访问项目:http://121.37.4.145:8080/jenkins-test/
1.5 编辑SVN钩子程序使用curl命令触发构建,实现整个自动化持续集成流程
- 构建触发器
远程触发的基本原理是 SVN 服务器给 Jenkins 项目特定的 URL 地址发送请求, 但必须以请求参数的形式携带一个特定值,这个特定值就是这里的“身份验证令牌”。
比如我们这个项目的地址触发地址是: http://121.37.4.145:8080/jenkins/job/jenkins-test/build
身份验证令牌是: ATGUIGU_TOKEN
那么最终的访问地址就是: http://121.37.4.145:8080/jenkins/job/jenkins-test/build?token=ATGUIGU_TOK EN 触发访问地址中 Jenkins 访问地址是根据实际情况改变的,项目名称根据实际 情况改变,其他都不变。
- Linux 的 curl 命令
Linux 的 curl 命令用来发送 HTTP 请求
-X 参数:指定请求方式
-v 参数:显示响应结果
-u 参数:携带用户名/密码
-H 参数:携带请求消息头信息例子:curl -X post -v -u [Jenkins 用户名]:[Jenkins 密码] -H "请求消息头信息" http://[服务器 IP 地址]:[服务器端口 号]/jenkins/job/[Jenkins 项目名称]/build?token=[身份验证令牌]
Jenkins 密码通过下面命令查看:
cat /root/.jenkins/secrets/initialAdminPassword
所以本项目的curl命令为:
curl -X post -v -u admin:069a478a56874ded8454a411ea4f3aaa http://121.37.4.145:8080/jenkins/job/jenkins-test/build?token=ATGUIGU_TOKEN
执行后,会发现 项目又构建了一次
- 编辑 SVN 版本库中的钩子程序
!!这里注意不要使用任何扩展名。如果按照我们习惯的使用.sh 扩展名则钩 子程序无法正常工作。
chmod 命令设置为钩子程序授予可执行权限
chmod 755 post-commit
把原有内容注释掉,加入 curl 命令
vim post-commit
- 修改本地代码并提交测试
浏览器查看:
- ※补充
1. 如果提交了代码无法执行,那可能是钩子程序没有可执行权限,注意授予权限
2. 如果发生 Jenkins 服务器从 SVN 服务器下载代码不是最新版的情况,那么就在 SVN 服务器的 URL 地址后面加上@HEAD 强制要求下载最新版。
至此,Jenkins+SVN 持续集成环境搭建全部完成!
二、Jenkins+Git 持续集成环境搭建
Jenkins 与 GitHub 配合实现持续集成需要注意以下几点:
第一:Jenkins 要部署到外网上,因为内网地址 GitHub 是无法访问到的。这一 点可以通过租用阿里云等平台提供的云服务器实现。
第二:Jenkins 所在的主机上需要安装 Git,通过 Git 程序从 GitHub 上 clone 代 码。
第三:在 Jenkins 内需要指定 Git 程序位置,和指定 JDK、Maven 程序位置非常 类似。
第四:在 GitHub 上使用每个 repository 的 WebHook 方式远程触发 Jenkins 构建。
第五:在 Jenkins 内关闭“防止跨站点请求伪造”
2.1 Github及Jenkins配置
- 本地使用idea创建一个maven webapp项目
- GitHub官网创建一个代码仓库
- Github中项目配置webhook
点击项目的【settings】->【Webhooks】
主要操作如下:(部分没有勾选的值没有截屏出来)
Hook URL获取方式:链接教程
最终结果:
2.2 Jenkins实现自动化部署
进入任务【jenkins-git-test】
- General
- 源码管理
- 构建触发器
- 构建
- 构建后的操作
- 提交项目测试
查看:成功!!!!!!