Jenkins+MAVEN+DUBBO/Tomcat
来源:互联网 发布:windows虚拟机安卓版 编辑:程序博客网 时间:2024/05/09 01:44
CSDN没法直接粘贴图片过来。原文,请到资源中下载:
http://download.csdn.net/detail/maotongbin/9676012
第1章 Jenkins简介
1.1 Jenkins简介
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能
Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。
1.2 Jenkins原理
这里简单阐述一下自己对jenkins的理解,方便大家快速入门。如果这里不理解可以先跳过。等按照说明把jenkins体验一遍后,再回头看这里会豁然开朗。
我们正常的运维流程是:
1.从svn检出代码
2.对代码进行构建
3.将构建好的文件发布到服务器
Jenkins的持续集成就是用来代替手工的,所以流程都是一样的。
1.3 从svn检出代码
1.在创建JOB是会要求填写svn(或者其他版本控制工具)信息
2.在构建Job时。Jenkins会根据配置,从svn上更新代码。将代码存储到jenkins的workspace下面。这里和我们本地的开发环境很类似
1.4 对代码进行构建
配置好Job所有信息以后,点击立即构建。可以通过控制台查看构建信息。
这里可以看到jenkins的构建,和本地的构建是完全一致的。只不过在构建前jenkins会从svn更新代码。
Jenkins构建信息:
本地构建信息:
构建成功后。可以在jenkins的workspace下面查看到构建结果。可以看到这里和本地构建结构是一样的。
1.5 将构建好的文件发布到服务器
如果是容器部署,Jenkins可以通过插件实现。因为我们用的是dubbo服务。所以这里没有安装插件。而是通过shell脚本进行项目部署。
1.jenkins可以配置,在构建后执行脚本
这里的 SSH是通过安装 SSH plugin插件实现的。整个过程就是连接到远程服务器。然后执行远程的shell脚本。
当然这里也可以执行本地脚本
这里的shell脚本,根据需要自己编写。主要工作就是:
1.将jenkins构建好的包拷贝到远程服务器上。
2.停止服务
3.删除旧的部署文件
4.发布新的部署文件
5.启动服务
到这里整个持续集成流程就结束了。
第2章 Jenkins安装
2.1 使用rpm安装jenkins
一 以下是在192.168.2.229机器 安装、配置jenkins全过程。
1
#jenkins 安装
rpm -ivh jenkins-2.23-1.1.noarch.rpm
2
##让jenkins可以找到java
#把 /opt/jdk1.7.0_79/bin/java加入到/etc/init.d/jenkins ,如下所示
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.6.0/bin/java
/usr/lib/jvm/jre-1.6.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/bin/java
/opt/jdk1.7.0_79/bin/java
"
3
#jenkins占用的端口
#修改/etc/sysconfig/jenkins里面的,
# JENKINS_PORT="8080"
cat /etc/sysconfig/jenkins
JENKINS_PORT="8280"
4
#设定开机启动
#因为现在安装后,rpm包自动设置好了。默认就是开机启动,所以可不执行。
#chkconfig jenkins on
#chkconfig --level 35 jenkins on
chkconfig --list
6服务启停
启动 service jenkins start
停止 service jenkins stop
重启 service jenkins restart
2.2 使用war安装jenkins
网络上有很多说明。安装过程简单。此处不再赘述。
第3章 Jenkins配置
3.1 系统管理
首先要对系统管理进行配置。才能保障jenkins的正常构建部署。这里主要包括svn插件、maven插件和系统参数的配置。
3.2 管理插件
进入【管理插件】页面。可以在“已安装”中查看已经安装的插件。如果缺少插件。可以通过“可选插件”进行安装。
这里我们主要关心3个插件的安装
SVN:用于获取源码
MAVEN:用于代码打包(如果不是maven项目就不需要此项了)
如果在新建Job是没有 构建maven项目这个选项。那就是因为没有安装这个插件。
SSH plugin:因为我们要使用远程脚本来执行部署,所以需要这个插件
Jenkins构建配置:
3.3 系统设置
系统设置里面可以配置全局的maven参数、邮件配置、SSH信息等。这里我们主要关注SSH配置。
在安装了SSH plugin插件后,系统设置里会出现对于ssh的配置。用于配置远程服务器的ssh信息。
这里的配置,也是jenkins构建时,设置Post Steps的数据来源。
3.4 Global Tool Configuration
这里比较重要。JDK可以让jenkins自己安装。也可以选择已经安装好的
主要想说的maven的配置。
开始的时候也是选择jenkins自动安装。但是后面遇到了个问题。
在打包时失败:提示找不dubbo的一个jar包。原因是这个jar包是公司私有的一个。所以公用服务器上是找不到的。由于没有找到jenkins自己安装的maven在哪里。于是自己安了一个maven。然后修改了maven的配置,让maven的服务器指向了私服。问题解决了。
关于maven配置指向私服网上有很多说明,这里就不说了。
第4章 JOB配置
4.1 新建JOB
这里选择maven项目。如果这里没有选项,说明没有安装maven插件。
4.2 源码管理
此处使用svn。这里配置一下 svn地址就可以了,其他默认。
4.3 构建触发器
build whenever a snapshot dependency is built
当job依赖的快照版本被build时,执行本job。
build after other projects are built
当本job依赖的job被build时,执行本job
build periodically
隔一段时间build一次,不管版本库代码是否发生变化,通常不会采用此种方式。
poll scm
隔一段时间比较一次源代码如果发生变更,那么就build。否则,不进行build,通常采用这种方式;
4.4 构建环境
可以根据需要编写一些脚本之类的。
4.5 Pre Steps
同样的可以添加自己的操作
4.6 Build
这里特别注意使用的是自己安装的maven。这个是在【Global Tool Configuration】里面配置的
4.7 Post Steps
这里在构建完成后。根据需要执行了远程脚本对项目进行部署。
依赖“SSH plugin”插件。此处需要注意。通过ssh访问远程主机时会提示输入密码。这里可以通过配置
“建立信任关系” 解决此问题。
参考:http://blog.csdn.net/maotongbin/article/details/53079781
这里的脚本都是放在相关主机的 /opt/jenkins目录下面:
4.8 构建设置
这里是配置构建完成后发送email的。此处注意在【系统设置】里配置参数。
4.9 构建后操作
同样的可以执行脚本等。做一些构建后的工作。
第5章 项目构建
1.配置好后可以在管理页面点击【立即构建】。对项目进行构建
2.左下方列表中将显示构建进度。点击进入可以查看详情。
3.通过控制台可以查看实时日志
脚本执行情况
第6章 脚本执行
脚本分为两种:
1.dubbo部署脚本
2.Tomcat部署脚本
6.1 dubbo部署脚本
以shengchan-caigou-service为例:
DUBBO_SERVICE_NAME="shengchan-caigou-service"
DUBBO_SERVICE_DIRNAME=${DUBBO_SERVICE_NAME}"-1.0-SNAPSHOT"
echo "start "${DUBBO_SERVICE_NAME}
#设置JAVA_HOME
export JAVA_HOME=/opt/jdk1.7.0_79
cd /opt
#从远程主机拷贝部署包到service服务器
#这里需要注意配置两台主机的信任。这样在使用scp命令时就不是要求输入密码
scp root@192.168.2.229:/var/lib/jenkins/workspace/cms/${DUBBO_SERVICE_NAME}/target/${DUBBO_SERVICE_DIRNAME}-assembly.tar.gz /opt
#杀死dubbo进程。采用dubbo下面的stop.sh无效,目前原因不明
ID=`ps -ef |grep java|grep $DUBBO_SERVICE_NAME |awk '{print $2}'`
kill -9 ${ID}
#删除旧的部署包。这里是开发环境所以没有进行备份
rm -rf /opt/${DUBBO_SERVICE_DIRNAME}
tar -xzf /opt/${DUBBO_SERVICE_DIRNAME}-assembly.tar.gz
#这里特别注意使用“\cp”,因为使用cp -f 无法强制覆盖。原因百度一下吧。不细说了
#另外这里使用了自己写的start.sh覆盖了dubbo的start.sh。请在问题记录中查看说明
\cp -f /opt/jenkins/start.sh /opt/${DUBBO_SERVICE_DIRNAME}/bin/start.sh
chmod +x /opt/${DUBBO_SERVICE_DIRNAME}/bin/start.sh
#这里有个问题。如果使用start.sh启动dubbo控制台会一致输出......所以将日志输出到后台
sh /opt/${DUBBO_SERVICE_DIRNAME}/bin/start.sh &> /dev/null &
echo "end "${DUBBO_SERVICE_NAME}
6.2 Tomcat部署脚本
以xiaofei-web为例:
WEB_NAME="xiaofei-web"
TOMCAT_PATH="/opt/apache-tomcat-7.0.65"
echo "start "${WEB_NAME}
export JAVA_HOME=/opt/jdk1.7.0_79
rm -rf ${TOMCAT_PATH}/webapps/${WEB_NAME}
ID=`ps -ef |grep java|grep ${TOMCAT_PATH} |awk '{print $2}'`
kill -9 ${ID}
scp root@192.168.2.229:/var/lib/jenkins/workspace/cms/${WEB_NAME}/target/${WEB_NAME}.war ${TOMCAT_PATH}/webapps/
chmod +x ${TOMCAT_PATH}/bin/startup.sh
sh ${TOMCAT_PATH}/bin/startup.sh
echo "end "${WEB_NAME}
第7章 问题记录
7.1 SVN权限问题
原因:svn账号没有xiaofei权限。不能下载xiaofei部分的代码。
解决办法:增加xiaofei权限
7.2 找不到私服上的JAR包
原因:com/alibaba/dubbo/2.8.4/ 下的jar包是本项目自己生成的,不能从远程仓库获取。
解决办法:配置maven本地仓库和私服(settings.xml)。
/opt/maven/apache-maven-3.3.9/conf
7.3 构建时JDK版本问题
原因:POM中没有配置JDK版本,构建时默认使用了1.5,版本太低
解决办法:POM中增加版本配置
7.4 DUBBO启动失败
Dubbo启动失败,在日志中提示: java不是有效命令。
dubbo的启动脚本示例:/opt/shengchan-caigou-service-1.0-SNAPSHOT/bin/start.sh
原因:dubbo的启动脚本,默认java是配置在环境变量中的。 但是使用jenkins远程调用。没有加载环境变量。造成java命令无效。
解决方法:这里我修改了start.sh脚本。每次发布项目时。使用我自己写的start.sh脚本覆盖dubbo自带的脚本。
下面是我改过的start.sh脚本。指定了java的位置。
在远程脚本中,将我自己改的start.sh 覆盖dubbo
参考:http://www.360doc.com/content/14/0603/15/9552892_383278847.shtml
补充:这里应该有更好的解决方案。请大家指教。
7.5 Host key verification failed
在脚本中执行scp命令时。提示Host key verification failed
原因:两个主机之间的信任关系有问题。造成验证失败。
解决方法:
配置信任:参考http://blog.csdn.net/maotongbin/article/details/53079781
发现只配置了信任关系还是不行。了解了一下。看到/root/ssh文件夹下面没有known_hosts文件。
1.通过CRT工具登录主机。手动执行了一下scp命令。
2.在执行时因为上面配置了信任关系。所以这里不需要输入密码了。 但会提示一句话。
这个输入 “yes”。
3.此时再查看/root/ssh文件夹下。已经有了known_hosts文件。问题解决了。
补充:这里应该有更好的解决方案。请大家指教。
7.6 远程shell启动失败
使用jenkins启动dubbo或tomcat失败。
原因:查了一下原因说是 jenkins在脚本执行结束后,就认为任务结束了,但是脚本启动的相关子程序仍然在运行。由于jenkins认为任务已经结束了,就结束了该构建相关的衍生进程。
解决方法:在执行脚本前增加一个环境变量。修改了jenkins的BUILD_ID这样,jenkins就不会把它当成衍生进程杀死了
第8章 参考
Jenkins+Maven+SVN快速搭建持续集成环境
http://www.cnblogs.com/sunzhenchao/archive/2013/01/30/2883289.html
Linux下用SCP无需输入密码传输文件:
http://blog.csdn.net/maotongbin/article/details/53079781
解决scp时报bash: scp: command not found的错误
http://blog.csdn.net/maotongbin/article/details/53079819
SSH 登录失败:Host key verification failed的处理方法
http://blog.csdn.net/maotongbin/article/details/53079840
jenkins无法重启tomcat的原因
http://blog.csdn.net/maotongbin/article/details/53079921
- Jenkins+MAVEN+DUBBO/Tomcat
- Jenkins+Tomcat+maven+git+
- Maven+Jenkins+Svn+Tomcat
- Maven+Jenkins+Svn+Tomcat
- Jenkins+maven+tomcat
- jenkins+gitlab+maven+tomcat档
- Jenkins+Git+Maven+Shell+Tomcat
- jenkins,maven--发布到Tomcat
- Jenkins + svn + Maven+ tomcat搭建
- TestNG+Jenkins+Maven参数化测试dubbo接口
- jenkins 配置【svn,maven,tomcat ,ssh】
- Jenkins部署:SVN-Maven-Tomcat全程
- jenkins+maven+tomcat热部署问题
- Linux下Tomcat+Maven+Jenkins搭建
- jenkins+maven+tomcat持续集成配置
- Jenkins+maven+svn+tomcat自动编译部署
- Jenkins+maven+svn+tomcat操作手册(一)
- Jenkins+maven+svn+tomcat操作手册(二)
- Spring框架基本设置案例_helloSpring
- 如何在twitter或者github上找靠谱程序员?
- 关于使用aidl中的接口但编译却找不到类的问题
- Http
- android java与webview中js交互
- Jenkins+MAVEN+DUBBO/Tomcat
- php缓存
- windows下程序崩溃,生成dump文件分析
- AFNetworking、ASIHTTPRequest中SSL的使用
- 配置多个tomcat服务器
- android 一款圆环形的选择器,支持叠加使用
- 利用ffmpeg的filter混音
- SQLServer中将时间戳转换为时间格式
- 数据库学习