使用Jenkins配置Git+Maven的自动化构建

背景

最近安装Jenkins,参照网上的各种资料进行尝试,折腾了好久,但是查找了这么多资料,相似度在90%以上!!!,相同的安装过程,测试了几台机器,未曾成功,不得不感慨自己能力有限,最终慢慢摸索,形成思路,现分享给大家,希望大家在安装的时候少走弯路。

PS:本人很痛恨这种粘贴复制,毫无思考的博主,不但浪费了大家的时间,还浪费了大家的感情。

知识背景

首先需要理解的是,Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。

意思是我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL,将代码拉取到其宿主服务器(就是Jenkins的安装位置),进行编译、打包和发布到容器中。

因此我们可以注意到的是,在Jenkins的宿主服务器中必须要有可以进行:代码clone(Git)、代码编译(Maven)、代码运行(Tomcat)这些基本的组成。

下边就开始讲解各部分的安装过程,如果已经某一步则可以进行下一步

一、Git的安装

1、安装依赖

sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

注意:perl-ExtUtils-MakeMaker 也是这些安装列表中的一员,不要因为显示的换行造成大家认为是两条执行命令。

2、下载Git

选择一个目录,存放下载的git,例如我的是:/home/xuliugen/tmp

wget https://github.com/git/git/archive/v2.3.0.zip

3、解压git

下载之后是这样的,不要感到奇怪,直接解压即可

技术分享

因为下载的是一个zip,所以使用命令将其解压到git目录下:

#参数-d 后边的是解压到的目录
unzip v2.3.0 -d git 

4、编译安装git

进入git目录

技术分享

将其安装在“/usr/local/git”目录下,命令如下:

make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install

5、配置Git

sudo vim /etc/profile #编辑profile文件

然后而已看到这个文件已经有很多配置了,只需要在最下边添加git的路径即可:

export PATH=/usr/local/git/bin:$PATH

将这段话放在最后边,然后使用source命令应用修改:

source /etc/profile

6、检验Git是否安装成功

git --version

技术分享

二、Maven安装

1、下载和解压Maven

Maven的安装包下载地址:

解压之后,我的位置是:

技术分享

2、配置Maven

编辑:~/.bash_profile文件,根据注释相应的修改即可

# maven所在的目录  
export M2_HOME=/home/xuliugen/software/maven/apache-maven-3.3.3
# maven bin所在的目录  
export M2=$M2_HOME/bin
# 将maven bin加到PATH变量中  
export PATH=$M2:$PATH
# 配置JAVA_HOME所在的目录,注意这个目录下应该有bin文件夹,bin下应该有java等命令  
export JAVA_HOME=/usr/lib/jvm/jre-1.7.0

然后运行:source ~/.bash_profile

3、查看Maven是否安装成功

使用:mvn -version 即可查看结果

技术分享

三、Jenkins的部署

Jenkins的安装很简单,直接将war放到容器中进行运行即可

1、将jenkins放到Tomcat中并解压,启动Tomcat

技术分享

启动成功之后,进入的界面如上,表示启动成功。

2、安装插件

在进行配置之前,由于使用的是Git拉去代码的方式,所以要首先安装插件

技术分享

找到:插件管理 在“可选插件”界面使用ctrl+f 搜索:Deploy to container Plugin 插件(这个是支持将代码部署到tomcat容器的)

技术分享

勾选,点击下边的按钮:直接安装,这个可能时间较久,等待即可。

技术分享

成功之后的截面为:

然后安装:GIT plugin,使用上述的方式,由于网络的原因,会安装失败,这就需要我们使用另一种方式进行安装

使用同样的方式在“可选插件”中搜索GIT plugin,找到之后点击蓝色链接(最好右键在新窗口中打开)

技术分享

会跳转到Git Plugin的信息地址

技术分享

可以看到Plugin ID为:git,然后在:http://updates.jenkins-ci.org/download/plugins/ 这地地方搜索即可找到,点进去,选择一个版本进行下载:

技术分享

技术分享

点进去下载的是一个hpi文件

然后同样的在:系统管理–管理插件–高级Tab中,下拉可以看到上传插件,然后选择文件上传刚才下载的hpi文件,即可,上传完之后,会自动安装。上述安装Deploy to container Plugin的方式也可以采用这种方式。

都安装完之后,在已安装Tab中可以看到刚安装的插件:

技术分享

3、进行配置

看到上图中的左侧有一个:系统管理 点击去

技术分享

上边的第一行黄色信息,表示编码问题,在Tomcat的conf–》server.xml文件中修改即可

技术分享

4、Jenkins系统设置

点击:系统设置,这里没有强调的都设置为默认即可

(1)JDK,别名是任意的

技术分享

(2)Git 的配置

技术分享

注意这里的git位置,是可执行文件的地址,即是git–bin–下的可执行文件 git的目录(类似于java中bin下的java可执行文件位置)

如果填错,后期回报无法找到git等错误,请大家注意!

(3)Ant的配置

由于本次并没有用刀Ant,不做配置

(4)Maven的配置

技术分享

(5)Jenkins Location

技术分享

这里配置的是ip加端口和一个路径名称,邮箱要进行设定

(6)邮件通知

技术分享

这里我配置的QQ邮箱,大家根据情况进行设置,用户名、密码分别为自己的QQ邮箱何密码

最后点击下边的应用 保存即可

5、Configure Global Security

然后回到系统管理,看到Configure Global Security 点击进去,根据下边进行配置即可

技术分享

点击应用 保存之后,然后在屏幕的右上角,有一个登录-注册 ,点击注册即可实现用户的登录。

技术分享

至此Jenkins的基本配置完成。

创建Job

1、创建项目

点击登录之后,会看到下边的界面中:My Views

技术分享

点击进去

技术分享

点击 创建一个新任务

技术分享

选择maven项目,点击OK

2、进行项目的配置

(1)源码管理选择Git,这个时候添加url之后,下边会报错,显示让去认证,认证即可(其他的安装中又遇到这个问题)

技术分享

(2)构建触发器

技术分享

选择第一个,其他的基本是定时执行什么的

(3)Post Steps

技术分享

选择上图中的,然后下边 的Execute shell如下:

#!/bin/bash 
#copy file and restart tomcat 

export JAVA_HOME=/data/home/server/jdk
export CATALINA_HOME=/home/xuliugen/dubbo-provider
export CATALINA_BASE=/home/xuliugen/dubbo-provider
export BUILD_ID=dontKillMe

tomcat_path=/home/xuliugen/dubbo-provider
project=dubbo-provider
war_name=dubbo-provider.war 
war_path=http://132.153.131.237/:8022/jenkins/job/ManenDemo/ws/targetserver_port=8082 
file_path=~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target

$tomcat_path/bin/shutdown.sh 

sleep 3s 

echo "rm -rf ${tomcat_path}/webapps/ROOT/*"

rm -rf ${tomcat_path}/webapps/ROOT/*

cd $file_path

cp ${war_name} ${tomcat_path}/webapps/ROOT/


cd $tomcat_path/webapps/ROOT/

unzip ${war_name}

rm -rf ${war_name}

sleep 5s 


#$tomcat_path/bin/startup.sh

cd $tomcat_path/bin/
./startup.sh

echo "server restarted"

(4)邮件通知

技术分享

至此基本设置完毕,点击应用 保存

(5)立即构建

点击左上角的立即构建

技术分享

然后看到下边的Build History 点击 蓝色的进去,会进入Console

技术分享

技术分享

技术分享

脚本的分析

在Jenkins的服务器上查看:

技术分享

技术分享

可以看到在/root/.jenkins这个目录,实际存放了Jenkins拉取Git代码之后编译好war的位置,到此,大家也许都该明白了,编译后的位置就在这里啊!然后,接着是部署到Tomcat容器中,如何将编译好的war放到tomcat中,这就需要脚本来完成,也是上述过程中配置的过程,下边对一行进行分析。

首先我们应该明白,将编译好的war放到tomcat容器中,我们首先要知道这两个的位置,很显然我们是知道的。

1、脚本文件的头,这个没得说

#!/bin/bash 

2、环境变量设置

export JAVA_HOME=/data/home/server/jdk
export CATALINA_HOME=/home/xuliugen/dubbo-provider
export CATALINA_BASE=/home/xuliugen/dubbo-provider
export BUILD_ID=dontKillMe

上边的各个位置,大家也许都知道,CATALINA_HOME和CATALINA_BASE的位置就是Tomcat容器的位置,这里根据需求我将Tomcat容器的名字改为dubbo-provider了,如果改成/home/xuliugen/tomcat是不是更好理解。

export BUILD_ID=dontKillMe这一句很重要,因为该job启动完后执行下一job,jenkins直接把tomcat进程杀了,所以无论脚本中怎么写了启动tomcat的命令,他是不会启动的。

3、其他位置

tomcat_path=/home/xuliugen/dubbo-provider #我的Tomcat位置
project=dubbo-provider #我的项目编译的名称
war_name=dubbo-provider.war  #最后打包的war名称
war_path=http://132.153.131.237/:8022/jenkins/job/ManenDemo/ws/targetserver_port=8082 
file_path=~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target

这个:war_path 其实也就是Jenkins的宿主服务器位置IP,端口为jenkins运行的端口,大家只需要将ip地址端口ManenDemo换成自己的即可;

file_path:就是Jenkins帮我们编译好的项目war的位置,上图中大家也可以看到

4、耳熟能详的执行命令

下边就是我们在使用原始方式,部署war的命令,大家很简单的可以理解,其中:

我是假设项目已经在运行的情况下,所以我上来就是先关闭Tomcat,正确的方式,应该判断端口是否打开,如果本身tomcat未启动,所以我的这种情况,会在Jenkins的Console中报连接失败的问题。

另外用到了sleep 3s 这个可以让线程休眠一下,这样的话可以看一下tomcat的日志信息。

$tomcat_path/bin/shutdown.sh 
sleep 3s 
echo "rm -rf ${tomcat_path}/webapps/ROOT/*"
rm -rf ${tomcat_path}/webapps/ROOT/*
cd $file_path
cp ${war_name} ${tomcat_path}/webapps/ROOT/
cd $tomcat_path/webapps/ROOT/
unzip ${war_name}
rm -rf ${war_name}
sleep 5s 
cd $tomcat_path/bin/
./startup.sh
echo "server restarted"

其他问题

1、部署项目的时候报错

技术分享

这个大家很好理解,是因为下载jar失败的问题,由于是第一次使用Maven,需要第一次下载很多jar到Maven仓库中,由于网络的问题下载失败,大家可以多次构建让他重新下载,或者直接到:https://repo.maven.apache.org/maven2 根据报错的jar,在maven2中找到自己确实的jar,然后在/root/.m2/repository 相应的位置添加jar即可。

2、编写脚本文件启动tomcat但是项目仍然运行不起来

激素hi上边说道的问题了:
export BUILD_ID=dontKillMe,因为该job启动完后执行下一job,jenkins直接把tomcat进程杀了,所以无论脚本中怎么写了启动tomcat的命令,他是不会启动的。

至此,Jenkins的部署完成,希望对大家有所帮助。

文章来自:http://blog.csdn.net/xlgen157387/article/details/50353317
© 2021 jiaocheng.bubufx.com  联系我们
ICP备案:鲁ICP备09046678号-3