信步漫谈之Jenkins—集成自动化部署 SVN 项目
一、环境准备
1)Jenkins 部署 WAR 包:jenkins.war(2.164.2 版本,WAR 包官方下载路径:https://jenkins.io/download/)
2)Tomcat 服务器:apache-tomcat-7.0.94-windows-x64.zip(使用 Jdk1.8)
3)其他:SVN 服务器,部署环境为联网状态(为联网安装 Jenkins 插件)
具体搭建过程参考我另一篇博客:信步漫谈之Jenkins—集成环境搭建
二、集成自动化部署 SVN 项目流程图

三、Jenkins 自动化部署插件安装
1)Jenkins 在初始安装时已自带svn插件(插件名:Subversion Plugin-in,可在插件管理中搜索到)
2)点击 “系统管理”->“插件管理”,搜索 Deploy to container 插件,勾选,点击 “直接安装” 即可(该插件功能是集成打包后自动部署到 Web 容器中)

四、SVN 版本库配置
进入 SVN 的版本库目录 conf 文件夹下,打开 svnserve.conf 文件,修改如下配置
anon-access :定义非授权用户的访问权限,有三种方式: none 、 read 、 write ,设置为 none 限制访问, read 为只读, write 为具有读写权限,默认为 read 。
auth-access :定义授权用户的访问权限,有三种方式: none 、 read 、 write ,设置为 none 限制访问, read 为只读, write 为具有读写权限,默认为 write 。

五、Tomcat 服务器配置
1、打开 TOMCAT_HOME/conf/tomcat-users.xml 文件,添加用户配置如下
<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" />
2、打开 TOMCAT_HOME/conf/server.xml 文件,修改 URL 地址的编码解码字符集如下
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
3、打开 TOMCAT_HOME/bin/setclasspath.bat,在文件首部添加本地 JDK 的环境变量(指向本地安装的 Jdk1.8)
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121
set JRE_HOME=C:\Program Files\Java\jre1.8.0_121
六、构建完成自动部署到 Tomcat
1)打开构建项目的配置(集成测试 Demo 程序参考我另一篇博客:信步漫谈之Jenkins—集成环境搭建)


2)配置“构建后操作步骤”为“Deploy war/ear to a container”(此处需要用到前面安装的自动化部署插件),配置 Tomcat 版本以及连接 Tomcat 的用户名密码(TOMCAT_HOME/conf/tomcat-users.xml)

注意点:WAR/EAR files 的值是相对于项目工作目录的 war 包路径
七、验证自动化部署到 Tomcat
1)点击构建项目,查看控制台输出,可以看到项目已部署到 Tomcat 上

2)打开 Tomcat 日志以及 webapps 目录,可看到项目部署操作


3)访问 Tomcat 项目地址正常

八、SVN 钩子程序
配置 SVN 钩子程序的目的是实现,在 SVN 执行提交的时候,触发 Jenkins 构建并部署到 Tomcat 上的操作。
1)打开构建项目,配置构建触发器,身份验证令牌可自定义

可以看到以上的说明,Use the following URL to trigger build remotely: JENKINS_URL/job/HelloWorld/build?token=TOKEN_NAME,意思是配置“身份验证令牌”后,可以通过访问 http://192.168.1.5:8080/jenkins/job/HelloWorld/build?token=ALFRED_BUILD 这个地址,触发 HelloWorld 项目构建操作。那么显而易见,只要我们在 SVN 提交的时候,自动触发一次该 URL 地址即可。
2)下载 windows 上的 curl 命令程序(官网地址:https://curl.haxx.se/download.html),下载后解压到本地即可使用


3)打开 CMD 命令行界面,输入以下命令,验证可触发 Jenkins 构建部署操作。
"E:\Program Files\curlCmd\curl.exe" http://192.168.1.5:8080/jenkins/job/HelloWorld/build?token=ALFRED_BUILD

4)打开 SVN 的仓库目录下的 hooks 文件夹(例如我本地是:E:\Repository\SvnRepositories\repos\hooks),该目录下是 SVN 提供的事件触发程序,我们要使用到的是 post-commit.tmpl 这个文件,意思是在 commit(提交)操作时触发的事件。首先,要将钩子程序的 tmpl 后缀改为bat,这样 SVN 才可以识别到。

3)编辑 post-commit.bat 文件,注释示例程序中原有的代码,添加以上的 curl 触发命令

九、SVN 提交后自动化构建部署到 Tomcat
修改测试程序代码,并提交 SVN,自动触发构建,成功。


PS:个人觉得使用 SVN 触发自动化构建部署看起来很高大上,但是实际应用上,可能还会有许多问题,比如在多人开发、项目较赶情况下,很可能会有频繁提交 SVN 的情况,SVN 服务器和 Jenkins 服务器,不是逼死这个,就是逼死那个,这是可以预见的。
十、SVN 钩子程序(Linux 环境下)
如果 SVN 是安装在 Linux 系统中,与 Windows 上差异如下(我使用的是 Windows 上的,来源网络):
1)hooks 触发程序直接去掉后缀(例如:post-commit.tmpl 改为post-commit),并且需要使用 chmod 命令赋予 755 权限。
2)Linux 系统有自带的 curl 命令
执行命令格式如下:
curl -X post -v -u [Jenkins 用户名]:[Jenkins 密码] http://[服务器 IP 地址]:[服务器端口号]/jenkins/job/[Jenkins 项目名称]/build?token=[身份验证令牌]
例如:curl -X post -v -u admin:171bd768f8ff41cd8fdb7bbc5be8095d http://192.168.1.5:8080/jenkins/job/HelloWorld/build?token=ALFRED_BUILD
curl 命令参数说明:
Linux 的 curl 命令用来发送 HTTP 请求。
-X 参数: 指定请求方式
-v 参数: 显示响应结果
-u 参数: 携带用户名/密码
-H 参数: 携带请求消息头信息
十一、问题解析
1)SVN 提交代码打包,出现打包的项目非 SVN 上项目最新版本
原因:SVN 服务器和 Jenkins 服务器的时间差影响,Jenkins 的 SVN 插件是使用时间标签下载,而不是取 HEAD,因此如果 SVN 服务器的提交代码时间比 Jenkins 的当前时间晚,该代码就不会被更新。
解决:设置两个服务器之间的时间同步是一种方式,但更保稳的方式是让 Jenkins 去获取 SVN 的 HEAD 版本,我们总是打包最新版本,不是吗!配置 Jenkins 的 SVN URL加 @HEAD 后缀即可,如下。

2)在使用 Jenkins 项目构建触发 URL 时,如果提示找不到 Crumb(该问题我没有遇到,解决方案来源于网络,如有雷同,绝非巧合,我们很可能剽了同一个作者,感恩)
原因:Jenkins 默认了配置“防止跨站点请求伪造”,如下


解决:通过如下方式获取 Crumb 值,并修改 项目构建触发的 curl 命令




携带 API Token 访问下面地址:
http://admin:090d592c760bf922d554ed4b1abb2137@192.168.70.131:8080/jenkins/crumbIssuer/api/xml

则触发 Jenkins 远程构建时需要携带的请求消息头就是:
Jenkins-Crumb:5dbccaf47a86bf5b675456f58855fe16
此时,在 Linux 上使用 curl 触发构建的命令格式如下(Windows 上不知道,遇到再补充):
curl -X post -v -u [Jenkins 用户名]:[Jenkins 密码] -H "请求消息头信息" http://[服务器 IP 地址]:[服务器端口号]/jenkins/job/[Jenkins 项目名称]/build?token=[身份验证令牌]
curl -X post -v -u admin:2f6bff33bda14baba83ba1c002045f05 -H "Jenkins-Crumb:88a12946e07d82b3b0d567c7c4610c9a" http://192.168.70.131:8080/jenkins/job/ProOne/build?token=ATGUIGU_TOKEN
信步漫谈之Jenkins—集成自动化部署 SVN 项目的更多相关文章
- Jenkins自动部署Tomcat项目
Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:
- CentOS7安装Jenkins自动化部署maven项目
前言: 最近要弄一个jenkins工具,已经安装好了并且jenkins使用部署项目的流程已经基本走通,上图: 话不多说,开始 第一步:安装jenkins: [ 准备环境: 在centOS7环境上:安装 ...
- Jenkins自动化部署war项目
基于上一篇Jenkins安装环境,下面对自动打包部署做个备忘 1.安装:Publish over SSH 插件 2.安装完成后,进入下图配置 ↓↓↓ 3.翻到底下↓↓↓ 找到刚刚安装的Publish ...
- 使用jenkins自部署Coding项目
下载安装jenkins 下载地址:https://jenkins.io/download/ 安装后通过主机的8080端口进行程序设置,插件安装默认的就好 Jenkins项目目录:C:\Program ...
- Jenkins进阶-部署Web项目到远程tomcat(7)
之前讲到的是如何构建一个项目,并且将代码进行编译.打包,那么打包完成最后的结果就需要发布到应用服务器,将项目部署成功.在之前的项目中我们采用的shell脚本来部署,下面讲解通过Jenkins部署web ...
- 信步漫谈之Jenkins—集成环境搭建
一.环境准备 1)Jenkins 部署 WAR 包:jenkins.war(2.164.2 版本,WAR 包官方下载路径:https://jenkins.io/download/)2)Tomcat 服 ...
- Jenkins自动部署springboot项目
说明: 该示例为在windows系统下自动化部署springboot 架构: springboot + github + gradle + jdk8 各种配置步骤及截图说明: 1.配置git,grad ...
- jenkins集成自动化部署插件(一) deploy-plugin
在实际情况中项目构建成功,特别是web项目构建成功是需要将war放到对应的服务上面,进行运行(测试的阶段可能就是发布到测试服务器上面)这样只需要指定构建的触发策略就可以自动构建以及部署,省去不少人工的 ...
- Linux安装Jenkins并部署springboot项目
安装步骤: 1.跳转连接https://pkg.jenkins.io/redhat-stable/下载安装包 2.安装命令: sudo rpm -ih jenkins-2.73.2-1.1.noarc ...
随机推荐
- KMP Algorithm 字符串匹配算法KMP小结
这篇小结主要是参考这篇帖子从头到尾彻底理解KMP,不得不佩服原作者,写的真是太详尽了,让博主产生了一种读学术论文的错觉.后来发现原作者是写书的,不由得更加敬佩了.博主不才,尝试着简化一些原帖子的内容, ...
- java生成/解析二维码
package a; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import ...
- mysql字符集校对
常用的两种 utf8_general_ci 按照普通的字母顺序,而且不区分大小写(比如:a B c D)utf8_bin 按照二进制排序(比如:A排在a前面,B D a c) ci是 case ins ...
- 免费为网站加上HTTPS
前言 最近有好几位同学直接微信赞助说快点更新文章.这个要和大家说声抱歉,的确很久没有写文章了.我们也不找借口,我会尽力保证多写文章.今天我们的主题来讲解 如何给自己的网站 加上HTTPS HTTPS是 ...
- Jmeter post请求传参问题
同线程组引用参数 举例1:新增数据bizId,然后将此次新增数据删除 添加新增数据接口,然后查询数据列表,正则表达式提取bizId 在删除接口引用此值${bizId} 添加断言,执行查看结果
- flutter 自定义输入框组件
一.组件分析 ui如下 根据UI分析我们需要提取哪些是动态的,可以通过传递参数得到不同的结果? 1.左侧icon 2.输入的文本 3.是否是密码框 4.输入框的控制器:如何时时得到输入框的值 二.快速 ...
- IIS宿主WCF服务*.svc Mime类型映射
经常会遇到由于.net安装组件缺失,导致发布wcf服务后,访问wcf报.svc请求类型不支持 简单方法就是添加删除程序,修改.net组件安装选项,勾选http激活即可: 或者手工添加映射处理程序 1. ...
- windy数
windy数指的是相邻两位差至少为2的数.问区间[a,b]中有多少个windy数 调了半个多小时,不过调出来之后对数位dp理解大大加深 #include<iostream> #includ ...
- C# 图片识别
项目需要识别图片上的信息,网上搜索试了Asprise-OCR.Microsoft Office Document Imaging(Office 2007) 组件实现两种方式,后者可以识别中文等其他语言 ...
- stm32f407以太网及USB OTG快速开发
stm32f407以太网及USB OTG快速开发 引言 想要快速完成网络协议栈和USB OTG功能,使用ST自家的工具STM32CubMx再好不过的了.如果你还不会使用,别着急下面我会一步一步的用图片 ...