Jenkins安装配置

Stella981
• 阅读 430

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。 --from wiki

安装:redhat/centos

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

yum install jenkins

PS1:如果你有tomcat/jetty等容器可以直接下载war部署。不过需要自己创建jenkins用户并且自己写启动脚本。。。

PS2:jenkins官方提供稳定版的docker镜像,见https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+with+Docker缺点是5000端口不好用。。而且要特别处理一下时区问题以及中文乱码问题。。建议还是自己写dockerfile吧从dockerbuild吧。。。

安装完成后打开浏览器,进入localhost:8080可以看到如下界面

Jenkins安装配置

选择新建项目,这里以maven项目为例:

Jenkins安装配置

选择源码管理方式:这里以svn为例,填写用户名密码。策略推荐选择先revert在update的策略,防止build出错。

Jenkins安装配置

然后安装一些插件:

自定义邮件:

Email Extension Plugin

scp远程拷贝文件支持

Hudson SCP publisher plugin

sonar支持

Sonar Plugin

远程登录执行脚本支持

SSH plugin

配置:

java一般需要指定目录(自动下载需要oracle帐号。而且很慢),而maven则一般自动下载即可。

另外邮件服务器配置在最新版1.581上有一个小bug,测试邮件无论你填什么都会提示验证失败。原因是因为。。。。jenkins的代码中传递的密码参数为空:(....不过不影响正常发送。

Jenkins安装配置

Jenkins安装配置

Jenkins安装配置

sonar的配置:再写一边数据库地址。。。。虽然旁边的问号提示挺全面的。

剩下的scp,ssh比较简单了。按照提示即可。

Jenkins安装配置

然后就是项目具体设置了:

1、mail-ex比较复杂推荐http://blog.csdn.net/wangmuming/article/details/22925357,这篇写的很详细,作者比较用心。

2、自动构建:与crondtab 类似 分别

Jenkins安装配置

如果使用版本控制系统,构建一次后,就会自动导入到用户列表中,这时可以为每个用户设置用户名密码和邮件地址,这样就能根据用户提交分别发邮件了。

Jenkins安装配置

安全配置:如果你的jenkins因为某些原因要暴露在公网或者公司内部需要权限控制那最好设置一下用户。

打开系统设置-安全设置一般而言选择jenkins专有用户数据库即可(这样就可以使用上面jenkins设置的用户名密码登录了),对于受攻击妄想症患者请移步https://wiki.jenkins-ci.org。UNIX用户和LDAP配置比较麻烦,而servlet方式好像是为了向后兼容?(待调查)

PS:注意一定要在用户注册完之后将允许用户注册取消。

Jenkins安装配置

多war包部署:

jenkins提供了专门在远程deploy war包的插件,但是。。只能部署一个。。。。:(而且连续的持续集成容易导致tomcat/jetty等内存溢出(跟permgen的溢出有关。。话说java的gc什么时候能在主程序运行期回收一下permgen)因此最好的办法还是使用ssh远程部署。ssh远程部署除了设置ssh免登录,使用expect导入用户名密码之外,jenkins还提供了scp和ssh插件。但是scp属于构建后操作,也就是说不管构建成不成功都执行。。。:(  坑爹啊!!

解决办法:

1、使用post-step中打执行shell功能写一个钩子。我实现的方式是使用软连接,详情见代码:

base=/bugaosuni
ln -s $base/A.war $base/AA.war
ln -s $base/B.war $base/BB.war
ln -s $base/C.war $base/CC.war
ln -s $base/D.war $base/DD.war

2、然后在pre-step中添加shell脚本,每次构建前清除上次的连接文件。

export LANG="en_US.UTF-8"  
base="haha"
file=( "$base/A.war" "$base/B.war" "$base/C.war" "$base/D.war" )
for iter in $file
do
   echo finding $iter 
   if [ -e "$iter" ]
   then
      echo $iter exits!!!
      rm "$iter"
   fi
done

利用软连接特性(cp复制的不是连接本身而是被连接文件)和jenkins每次构建都会清除上一次打war包特性。就可以仅仅在每次build成功之后才部署。

注意:如果你不想在unstable情况下部署,那么post-step中执行条件一定要选择Run only if build succeeds。(顺便吐槽一下,jenkins能不能为每个post-step单独指定一个执行的条件选项,而不是一锅端啊!)

对于tomcat/jetty热部署产生的内存溢出问题,可以在每次部署前使用远程ssh服务器重启tomcat/jetty。当然你也可以利用zabbix监控tomcat状态,自动重启tomcat。

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
5个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
技术小男生 技术小男生
5个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
5个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
5个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
小森森 小森森
5个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
5个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
5个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
密钥管理系统-为你的天翼云资产上把“锁
本文关键词:数据安全,密码机,密钥管理一、你的云上资产真的安全么?1.2021年1月,巴西的一个数据库30TB数据被破坏,泄露的数据包含有1.04亿辆汽车和约4000万家公司的详细信息,受影响的人员数量可能有2.2亿;2.2021年2月,广受欢迎的音频聊天室应用Clubhouse的用户数据被恶意黑客或间谍窃取。据悉,一位身份不明的用户能够将Clubho
NVIDIA安培架构下MIG技术分析
关键词:NVIDIA、MIG、安培一什么是MIG2020年5月,NVIDIA发布了最新的GPU架构:安培,以及基于安培架构的最新的GPU:A100。安培提供了许多新的特性,MIG是其中一项非常重要的新特性。MIG的全名是MultiInstanceGPU。NVIDIA安培架构中的MIG模式可以在A100GPU上并行运行七个作业。多实
helloworld_28799839 helloworld_28799839
5个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue