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上更新代码。将代码存储到jenkinsworkspace下面。这里和我们本地的开发环境很类似

 

1.4 对代码进行构建

配置好Job所有信息以后,点击立即构建。可以通过控制台查看构建信息。

 

这里可以看到jenkins的构建,和本地的构建是完全一致的。只不过在构建前jenkins会从svn更新代码。

Jenkins构建信息:

 

本地构建信息:

 

构建成功后。可以在jenkinsworkspace下面查看到构建结果。可以看到这里和本地构建结构是一样的。

 

 

 

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依赖的jobbuild时,执行本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覆盖了dubbostart.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启动dubbotomcat失败。

 

原因:查了一下原因说是 jenkins在脚本执行结束后,就认为任务结束了,但是脚本启动的相关子程序仍然在运行。由于jenkins认为任务已经结束了,就结束了该构建相关的衍生进程。

解决方法:在执行脚本前增加一个环境变量。修改了jenkinsBUILD_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

 

0 0
原创粉丝点击