文档章节

Jenkins快速CI实战笔记

蛮大人
 蛮大人
发布于 2017/07/11 16:37
字数 1455
阅读 1619
收藏 76
点赞 1
评论 7

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!

© 著作权归作者所有

共有 人打赏支持
蛮大人

蛮大人

粉丝 33
博文 24
码字总数 47360
作品 0
渝北
运维
加载中

评论(7)

蛮大人
蛮大人

引用来自“thomaslwq”的评论

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

引用来自“wy821027”的评论

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

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

666

天天
紫薯和白薯
紫薯和白薯
直接docker下载jenkins镜像
百里奚
百里奚
666
高端大气上档次_
高端大气上档次_
看好你 打赏
jenkins笔记(1)

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

KaliArch ⋅ 2017/12/14 ⋅ 0

Jenkins入门

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

aijfanta ⋅ 2016/08/22 ⋅ 0

Jenkins入门系列之——01第一章 Jenkins是什么?

第一章 Jenkins是什么? Jenkins 是一个可扩展的持续集成引擎。 主要用于: l 持续、自动地构建/测试软件项目。 l 监控一些定时执行的任务。 Jenkins拥有的特性包括: l 易于安装-只要把jen...

雨飞飞 ⋅ 2016/02/26 ⋅ 0

6.2、 产品经理甩锅指南-CI环境

上次在这里提到了敏捷开发scrum,6、产品经理和包工头的故事,敏捷开发背景下,还有CI(持续集成)环境,持续交付和持续部署。 小奈:今天捅了个篓子,我只是叫开发,修改个导航栏而已。 也测试...

产品经理的技术课堂 ⋅ 06/01 ⋅ 0

ChatOps实战

image.png ChatOps概念在国内已经有一些文章谈过,但是都处于理论范畴。而本文则是一篇ChatOps实践的文章。 有必要说明我对ChatOps的理解,ChatOps表面上就是在一个聊天窗口中,发送一个命令...

翟志军 ⋅ 2017/10/08 ⋅ 0

关于Jenkins在Linux快速搭建持续集成环境

Jenkins包提取地址 http://www.jenkins-ci.org/ 右边自选 本人服务器环境是centOS6.3,yum search jenkins没有这个包,所以需要到http://pkg.jenkins-ci.org/redhat/来添加 sudo wget -O /et...

liupengv5 ⋅ 2012/11/20 ⋅ 0

Jenkins & Docker 持续集成实践

Jenkins & Docker 持续集成实践 运维生存时间 - 运维生存时间2017-12-109 阅读 jenkinsdockerLinux 发表评论 A+ 所属分类: Linux 前言 持续集成(CI/CD)是一种软件开发实践。用于帮助团队成员...

运维生存时间 - 运维生存时间 ⋅ 2017/12/10 ⋅ 0

Jenkins & Docker 持续集成实践

前言 持续集成(CI/CD)是一种软件开发实践。用于帮助团队成员频繁、快速的集成,测试他们的工作成果,以尽快发现集成错误。 更频繁、更早的集成意味着更早的发现问题。通过持续集成,及时发现...

English0523 ⋅ 2017/12/25 ⋅ 0

当容器与CI/CD相遇,7个建议送给你

当容器与CI/CD相遇,7个建议送给你 数人云博客2017-09-193 阅读 ci 数人云: Docker是CI/CD的早期采用者,通过利用如GIT等源代码控制机制的正确集成,Jenkins可以在开发者每次提交代码时启动...

数人云博客 ⋅ 2017/09/19 ⋅ 0

Jenkins实战演练之安全管理

【前提】 通过《Jenkins实战演练之Windows服务器快速搭建》(http://my.oschina.net/iware/blog/191818)和《Jenkins实战演练之Linux服务器快速搭建》(http://my.oschina.net/iware/blog/19...

woneiware ⋅ 2014/01/09 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 53分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部