巨人的肩膀
Jenkins「第一节」-win10环境tomcat部署
高版本Jenkins关闭跨站请求伪造保护(CSRF)
场景
需要在Windows台式机上搭建Jenkins环境,构建并部署项目到本地tomcat。因该台式机放在公司局域网内,为了方便研发和测试人员构建,需要在该台式机上搭建Nginx并对jenkins进行反向代理。
需要预先完成的操作
为了方便看官,特将相关资源在百度云分享:
链接:https://pan.baidu.com/s/1swd45m7V7f-O8NHFvK3QNw
提取码:1q8i
安装:
- JDK(可以从官网下载一个JDK)
- Maven(切记要使用阿里的maven仓库,否则构建速度非常慢,可参考此文章)
- Git(因待构建项目代码存放在git上,故需安装git客户端,可参考此博文)
- Nginx(如果需要通过Nginx反向代理Jenkins的话)
- awk 用于获取tomcat进程id(下载,解压并将awk.exe复制到C:\Windows\System32)
下载:
- Tomcat(可以从官网下载一个Tomcat)
- jenkins.war(同上)
文章叙述方式
本文将和大家一起一步一步地完成Jenkins环境搭建,使用脚本构建并自动化部署一个项目,过程中会遇到一些问题,将在出现问题的时候加以介绍解决方案,所以,建议先跟着文章走完整个流程,整体有个感觉,然后再开始着手操作。
步骤
一、搭建Jenkins环境
1、解压Tomcat到指定目录中,为了方便管理,将解压后的tomcat目录重命名为tomcat-8088-jenkins
2、修改Tomcat配置文件conf/server.xml,避免因为端口被占用而出现项目启动失败
<Server port="8005" shutdown="SHUTDOWN">
修改为:
<Server port="8105" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为:
<Connector port="8088" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8543" />
3、将jenkins.war移动到Tomcat的webapps中
4、控制台cmd中切换到tomcat目录的bin目录中,执行以下命令启动tomcat:
catalina.bat run
5、浏览器中访问jenkins:http://localhost:8088/jenkins
6、页面提示需要 输入管理员密码 “解锁Jenkins”,该密码为系统自动生成的密码,密码在这个文件中,用txt打开即可:C:\Users\【此处是你当前windows用户的账号名】\.jenkins\secrets
7、输入密码,并点击继续,选择安装推荐插件即可,速度很慢,需要等待一段时间,可以隔1小时看一次
8、创建admin账号
9、Jenkins实例url配置,使用修改,使用默认值即可
10、进入完成页面
二、配置Jenkins参数
1、缓存的最大空间不足:
org.apache.catalina.webresources.Cache.getResource 无 法将位于[/images/top-sticker-bottom-edge.png]的资源添加到Web应用程序[/jenkins]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间
解决办法:
在tomcat中conf/context.xml末尾增加配置:
<Resources cachingAllowed="true" cacheMaxSize="100000" />
2、CrumbFilter 警告:
hudson.security.csrf.CrumbFilter.doFilter No valid crumb was included in request for /jenkins/ajaxExecutors by admin. Returning 403.
解决办法:
修改tomcat的bin/catalina.bat,增加以下内容,注意添加的位置:
set JAVA_OPTS=-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
3、为了避免Jenkins构建完成后 会自动kill掉tomcat进程,导致项目无法正常启动的问题,需要增加参数禁止该行为
解决方案:
修改tomcat的bin/catalina.bat,增加以下内容,注意添加的位置:
set JAVA_OPTS=-Dhudson.util.ProcessTree.disable=true
三、构建部署项目
1、检出代码
到指定目录下,通过git检出代码,本文中目录为:D:\Code\backend
2、创建Jenkins 构建项目
3、增加构建和部署脚本
为了方便脚本管理,建议将不同步骤的脚本单独放到一个 “构建步骤”:
echo "构建项目"
D:
cd D:\Code\backend\common-pro
git pull
mvn clean package
**【注意】**此处使用了awk工具,需要将上面提供的资源中awk.exe保存到C:\Windows\System32中
echo "停止tomcat"
set pid=-123
for /F "tokens=*" %%i in ('jps -v^|findstr 8088^|awk "{print $1}"') do ( set pid=%%i)
if "%pid%" neq "-123" (
taskkill /f /pid %pid%
)
echo "移动war包到tomcat"
D:
cd D:\Server\tomcat-8088\apache-tomcat-8.5.57\webapps
if exist backend.war (
del /S/Q backend.war
)
if exist backend (
rmdir /S/Q backend
)
copy D:\Code\backend\common-pro\target\mypro-1.0.1-SNAPSHOT.war backend.war
echo "启动项目tomcat"
D:
cd D:\Server\tomcat-8088\apache-tomcat-8.5.57\bin
set CATALINA_HOME=D:\Server\tomcat-8088\apache-tomcat-8.5.57
set CATALINA_BASE=D:\Server\tomcat-8088\apache-tomcat-8.5.57
set CATALINA_TMPDIR=D:\Server\tomcat-8088\apache-tomcat-8.5.57\temp
start /b startup.bat
保存配置:
3、构建部署项目
构建成功的日志:
三、使用Nginx代理(可选步骤,按需进行)
1、解压Nginx
2、修改配置文件,实现代理jenkins
修改Nginx配置文件conf/nginx.conf:
3、双击nginx.exe启动nginx
4、访问Jenkins:http://localhost/jenkins/
5、固定台式机的IP,避免机器重启后IP发生改变
登录路由器后台管理,将该台式机绑定到指定IP即可。以笔者的TP-Link为例,进行下面的操作即可绑定:
找到台式机对应的信息,点击+ 给台式机绑定IP:
6、局域网内可以通过该台式机ip访问jenkins:http://【该台式机在局域网内的IP】/jenkins,如:http://192.168.1.123/jenkins
结束语
至此,旅途结束,大家可以回过头逐一步骤进行操作,搭建属于自己的自动化构建工具。
笔者技术水平有限,如有不对之处,还望各位不吝赐教。
希望本文能给您带来帮助,如果遇到问题可以留言交流讨论。