文档章节

Jenkins快速CI实战笔记

蛮大人
 蛮大人
发布于 2017/07/11 16:37
字数 1455
阅读 1737
收藏 77

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

访问, http://localhost:8080/

配置和插件

输入安全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

参考:Tomcat 内存溢出,堆栈配置各种调整

另外,使用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 :

运行构建

jenkins—>autowar—>立即构建!

Build History—>Console Output ,查看实时日志输出

切回主页jenkins,看到最后的蓝球了么:

欢庆吧,少年!s

排错

自动化部署排错

验证版本和命令

java、maven、svn或git版本是否正确、命令是否正常

验证手工打包

maven clean install

检查Tomcat安装用户

who am i

确保不是以root用户安装和运行的tomcat。会导致各种莫名其妙的人品问题。

验证手工部署

http://localhost/manager/

验证自动化打包

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!

© 著作权归作者所有

共有 人打赏支持
蛮大人

蛮大人

粉丝 34
博文 24
码字总数 47360
作品 0
渝北
运维
私信 提问
加载中

评论(7)

蛮大人
蛮大人

引用来自“thomaslwq”的评论

hello,可否留个联系方式,我最近也在弄持续集成,看以后能不能学习一下~
欢迎交流,共同进步。
公司邮箱:kangcunhua@git.com.cn
微信:18511891585
蛮大人
蛮大人

引用来自“wy821027”的评论

直接docker下载jenkins镜像
谢谢,docker确实方便。
有时候会受限于实施环境,只能有什么就用什么,引入docker在一些地方光是评审流程就耗不起。
thomaslwq
thomaslwq
hello,可否留个联系方式,我最近也在弄持续集成,看以后能不能学习一下~
道道
道道

引用来自“百里奚”的评论

666

天天
当朝宰相
当朝宰相
直接docker下载jenkins镜像
百里奚
百里奚
666
高端大气上档次_
高端大气上档次_
看好你 打赏
3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站

持续集成(Continuous integration)是一种软件开发实践。 它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。 与持续集成相关的,还有两个概念,分别是持续交付(Con...

DockOne
2017/07/25
1
0
jenkins笔记(1)

一、相关概念 > ## 1.1 Jenkins概念: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成...

KaliArch
2017/12/14
0
0
3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站

持续集成(Continuous integration)是一种软件开发实践。 它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。 与持续集成相关的,还有两个概念,分别是持续交付(Con...

DockOne
2017/07/25
0
0
Jenkins入门

在网上貌似没有找到Jenkins的中文的太多的文档,有的都是关于Hudson的一些零零散散的,所以自己边学习边实践总结了以下系列文章,希望有助于大家对于Jenkins的使用。 本系列文章是基于我3年多...

aijfanta
2016/08/22
62
0
【Jenkins 学习笔记】玩转持续集成与持续交付

原文目录:https://www.cloudcrossing.xyz/post/52/ 1 Jenkins 概述 Jenkins 是一个开源软件项目,是基于Java开发的一种可拓展持续集成工具,主要用于持续、自动地构建 / 测试 / 集成软件项目...

苍云横渡
2018/08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
1
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
4
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部