Jenkins快速CI实战笔记
[TOC]
根据项目需要,通过Jenkins搭建CI环境,回忆整理而成,感谢小伙伴们的支持!
安装与运行
环境准备
- 安装JDK8:网上有绿色版,设置好环境变量JAVA_HOME,CLASS_PATH即可;
- 安装maven2:网上有绿色版,设置好环境变量MAVEN_HOME,PATH即可;
- 安装Tomcat7:网上有绿色版
- 准备svn或git版本管理server:略
- 准备maven私有仓库或比较快的镜像:略
下载
直接到官方下载war包即可 , Generic Java package (.war)
运行
java -jar jenkins.war
配置和插件
输入安全key
第一次访问会提示出于安全考虑,需要根据提示输入对应安全key。根据提示打开文件,copy,粘贴即可;
因为是内网,跳过联网安装插件,后续手工安装;
创建管理员
admin/admin
配置用户策略
参考:Jenkins学习之——(1)Jenkins的安装与配置
Configure Global Security
Jenkins—>系统管理—>Configure Global Security
勾选:启用安全
访问控制—>安全域
勾选:Jenkins 专有用户数据库
勾选:允许用户注册
授权策略
勾选:登录用户可以做任何事
安装插件
前面说过,因为是内网,跳过联网安装插件,后续手工安装;
我们需要:
- Deploy to container Plugin
- Maven Integration Plugin
- Subversion Plug-in
**注意:**依赖一些插件,注意版本,一定要下载安装指定版本,不要跨大版本哦,如果指定了小版本,一定要满足;
安装顺序
Deploy to container Plugin、javadoc、struts、junit、display-url-api、mailer、maven-plugin、
Credentials、ssh-credentials\scm-api、mapdb-api、workflow-step-api、workflow-scm-step、subersion
准备:配置CI环境
- 指定maven2
- 指定JDK:可以是任何你工程需要的版本
- 指定SVN:工程地址、账号\密码
准备:svn SSL验证
在jenkins服务器上运行如下代码即可,根据提示接受certificate:
svn list https://10.129.42.23/svn/PRMS/trunk/PRMS
不配置jenkins所在服务器读取svn的ssl认证,就会报连接被拒绝,自动打包就不能成功;
准备:配置入站规则
Win2012Server中,高级安全Windows防火墙,新建入站规则:
- 常规->名称:Jenkins(TCP in)
- 常规->操作:允许连接
- 协议和端口->协议类型:TCP
- 协议和端口->本地端口:特定端口,8080
准备:配置tomcat命令行权限
自动部署是要用到text命令行权限的,打开tomcat的用户配置文件,给管理员增加manager-script权限
/conf/tomcat-users.xml
<user username="admin" password="123456" roles="manager-gui,manager-status,manager-script"/>
准备:配置tomcat堆栈
如果不配置,在jenkins进行自动化部署时,会提示"OutOfMemery",内存溢出:
%TOMCAT_HOME%/logs/catalina.out
Exception in threat "http-bio-8080-exec-1"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "http-bio-8080-exec-1"
**现象是:**卡在以下日志不动:
jenkins—>autowar—>#29—>Console Output
Deploying [C:\Users\Administrator\.jenkins\workspace\autowar\prms-web\target\prms-web.war]
必须登录tomcat服务器,手工杀掉tomcat后台进程,重启才能正常
ps -ef | grep java
kill -9 %tomcat进程号%
./startup.sh
办法:修改%TOMCAT_HOME%/bin/catalina.sh,在"echo "Using CATALINA_BASE: $CATALINA_BASE""上面加入此行:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms2048m -Xmx2048m -XX:MaxPermSize=512m
另外,使用Spring整合quartz1.9时,会出现undeploy应用时,等待quartz定时任务的挂起(卡死,没反应),办法是升级quartz到2.1以上,或者写一个监听类,当app应用destroy时,quartz任务也同样destory,别忘了加载到web.xml中;
准备:配置tomcat上传文件上限
tomcat7默认上传大小为50M,在自动化脚手架代码的今天,怎么够用:加个零,500MB。重启tomcat;
<multipart-config>
<!-- 500MB max -->
<max-file-size>524288000</max-file-size>
<max-request-size>524288000</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
如果不配置,则会在manager.2017-07-11.log报如下错误
java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (129429013) exceeds the configured maximum (52428800)
配置CI构建
新建
—>构建一个maven项目,名字随便起
源码管理
- 选择Svbversion
- Repository URL: 工程的SVN地址
- Credentials:自己的用户名\密码
- 其他默认,保存
构建触发器
勾选: Build where a SNAPSHOP dependency is built
生成快照就进行一次构建;// 这个不大理解。还需要了解SVN快照(snapshop)的意义
勾选: Build Periodically
每天凌晨两点固定进行一次构建
日程表(注意有空格)
H 2 * * *
勾选: Poll SCM
每5分钟检查一次代码库,如有更新则进行一次构建;
日程表(注意有空格)
H/5 * * * *
Pre Steps—>Build
- Root POM:pom.xml
- Goal and options: clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
构建后操作
- WAR/EARfiles:**/*.war
- Context path: prms-web
- Containers :
- Tomcat 7.*
- Manager username: admin
- Manager password: yourpassword
- Tomcat URL: http://10.129.42.21:8080/
运行构建
jenkins—>autowar—>立即构建!
Build History—>Console Output ,查看实时日志输出
切回主页jenkins,看到最后的蓝球了么:
欢庆吧,少年!s
排错
自动化部署排错
验证版本和命令
java、maven、svn或git版本是否正确、命令是否正常
验证手工打包
maven clean install
检查Tomcat安装用户
who am i
确保不是以root用户安装和运行的tomcat。会导致各种莫名其妙的人品问题。
验证手工部署
验证自动化打包
clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
跳过doc生成和单元测试
验证自动化部署权限
/conf/tomcat-users.xml,赋予管理员manager-script权限
参考:准备:配置tomcat命令行权限
验证自动化部署
参考 配置 “构建后操作”
Jenkins排错:配置用户权限
因忘记密码,或者配置出错,登录时提示“登录信息无效”
C:\Users/Administrator/.jenkins/config.xml
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
处理:
- 将<useSecurity>修改成false
- 删除 </authorizationStrategy>和</securityRealm> ,重启jenkins,重新打开jenkins即可
That's all,have fun!