设为首页 收藏本站
查看: 1133|回复: 0

[经验分享] Jenkins+SVN+Maven+Shell 实现项目一键发布

[复制链接]

尚未签到

发表于 2017-5-15 07:55:12 | 显示全部楼层 |阅读模式
Jenkins+SVN+Maven+Shell

实现项目一键发布

一、前言
众所周知,Jenkins默认情况下可以实现项目更新(通过SVN),和项目发布,通过(MAVEN插件),但是这种情况下发布到一些容器底下(如Tomcat)时,经过多次发布后JVM会报OutOfMemoryError PermGen space,这个原因是由于这些容器在覆盖老项目后并不会释放老项目内存永久区的资源,久而久之,导致系统永久区内存溢出。为解决这个问题,我们只有通过发布后重新启动容器才能解决该问题。那有什么办法可以使容器在发布新项目后自动重启呢?重启过程中,我们希望容器正在处理的作业安全完成后(如quartz作业执行完后),容器再重启,如何做到?本文要与大家分享的便是其中一种便利安全的方法。
 
二、  Jenkins安装与配置
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。
安装:
官网:http://jenkins-ci.org/
选择一个操作系统版本的安装,我这边选择的是 Red Hat/Fedora/CentOS
安装及启动过程:

 

rpm -ivh jenkins-1.590-1.1.noarch.rpm   
service jenkins start

 



访问:
http://<ip>:8080/
 
三、  Publish Over SSH插件安装
DSC0000.png

依次单击“Jenkins->系统管理->管理插件菜单
DSC0001.png

在可选插件选项卡中找到勾选Publish Over SSH插件,点击界面下方的直接安装按钮。等待jenkins安装完毕即可。
DSC0002.png

四、  Publish Over SSH插件配置
全局配置:
DSC0003.png

依次点开“Jenkins->系统管理->系统设置菜单
找到Publish over SSH配置项,配置如下配置
DSC0004.png

底下还有个Test Configuration按钮,点击,如出现Success则表示配置成功。
DSC0005.png

最后点击页底的保存按钮,完成配置。
DSC0006.png

五、 创建Jenkins Item
直接点击Jenkins首页的新建按钮,创建一个Maven项目,配置根据大家需要,实际配置,本文仅列出作者的配置,供参考:
DSC0007.png

DSC0008.png

DSC0009.png DSC00010.png DSC00011.png

其中Exec command的脚本是一个shell文件,放置在远程发布机上后,可执行参数有三个,分别如下,第一个参数必填,后面两个选填,默认值是8080和/save/apache-tomcat-7.0.56,大家可以在第六节的SHELL脚本中改成大家项目中自己的默认参数。

./publish.sh <项目WEB显示名称> [TOMCAT端口] [tomcat安装主目录]
 
六、  编写Shell脚本
需要在你发布的目标机器上编写该脚本,你也可以在开发环境编好后,放到目标机器上,以下给出我的脚本:
 

#!/bin/bash
#defined
TOMCAT_HOME="/save/apache-tomcat-7.0.56"
TOMCAT_PORT=8080
PROJECT="$1"
#param validate
if [ $# -lt 1 ]; then  
echo "you must use like this : ./publish.sh <projectname> [tomcat port] [tomcat home dir]"  
exit  
fi
if [ "$2" != "" ]; then
TOMCAT_PORT=$2
fi
if [ "$3" != "" ]; then
TOMCAT_HOME="$3"
fi
#shutdown tomcat
"$TOMCAT_HOME"/bin/shutdown.sh
echo "tomcat shutdown"
#check tomcat process
tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`
echo "current :" $tomcat_pid
while [ -n "$tomcat_pid" ]
do
sleep 5
tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`
echo "scan tomcat pid :" $tomcat_pid
done
#publish project
echo "scan no tomcat pid,$PROJECT publishing"
rm -rf "$TOMCAT_HOME"/webapps/$PROJECT*
cp /save/$PROJECT*.war "$TOMCAT_HOME"/webapps/$PROJECT.war
#bak project
BAK_DIR=/save/bak/$PROJECT/`date +%Y%m%d`
mkdir -p "$BAK_DIR"
cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war
#remove tmp
rm -rf /save/$PROJECT*.war
#start tomcat
"$TOMCAT_HOME"/bin/startup.sh
echo "tomcat is starting,please try to access $PROJECT conslone url"
 
该脚本具有自动安全停Tomcat,自动发布项目,自动备份已发布项目版本的功能。
需要注意的是你连上来的admin用户需要具有执行该文件的权限,如果没有可以
chmod 600(755) publish.sh
具体权限给多少,根据你们的需要,决定权在你们手上。
 
如果shell执行出现如下错误,则可能是你在etc/profile中设置了JAVA_HOME,同时您还需要在/etc/bashrc也设置JAVA_HOME。
DSC00012.png

原因:远程机器的java_home在配置在/etc/profile中的,这个只给shell用户使用的;
但对于ssh 这种非login shell(non-login shell)用户,需要配置在/etc/bashrc中。

参考配置:
 

export JAVA_HOME=/usr/java/jdk1.6.0_45
export JAVA_BIN=/usr/java/jdk1.6.0_45/bin
export PATH=$PATH:$JAVA_HOME/bin
如果以上配置还不能解决你的问题,尝试下去的做法:
---------------------------------------------修改.bash_profile文件开始----------------------------------
修改.bash_profile文件方式是用户级的,对当前用户可用,其它用户无法使用。这种方式一般用于生产。.bash_profile文件在用户的根目录,比如说www用户的根目录是/home/www。
具体配置如下:

cd /home/www/
vim .bash_profile
 
 
插入下面3行配置后保存退出:

export JAVA_HOME=/usr/java/jdk1.6.0_45/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 
---------------------------------------------修改.bash_profile文件结束----------------------------------
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-377381-1-1.html 上篇帖子: shell 修改Jenkins中config文件 增加邮件配置 下篇帖子: jenkins执行shell随job完成而中断问题解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表