jenkins 部署 git 项目

背景

最近安装Jenkins,参照网上的各类资料进行尝试,折腾了很久,可是查找了这么多资料,类似度在90%以上!!!,相同的安装过程,测试了几台机器,不曾成功,不得不感慨本身能力有限,最终慢慢摸索,造成思路,现分享给你们,但愿你们在安装的时候少走弯路。java

PS:本人很痛恨那种粘贴复制,毫无思考的博主,本想着拿着解决问题的心态,但结果仍是同样,不但浪费了你们的时间,还浪费了你们的感情,因此,我把我遇到的问题和解决的方式记录下来和你们分享。git

知识背景

首先须要理解的是,Jenkins是帮咱们将代码进行统一的编译打包、还能够放到tomcat容器中进行发布。github

意思是咱们经过配置,将之前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins经过给定的代码地址URL,将代码拉取到其“宿主服务器”(这是我我的的称呼,在下边会用到,就是Jenkins的安装位置),进行编译、打包和发布到容器中。web

所以咱们能够注意到的是,在Jenkins的宿主服务器中必需要有能够进行:代码clone(Git)、代码编译(Maven)、代码运行(Tomcat)的基本环境,其余文章上来就是安装jenkins,忽略了一些基本的配置。spring

下边就开始讲解各部分的安装过程,若是已经安装某一步的环境,则能够以此进行下一步。docker

1、Git的安装

一、安装依赖shell

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

注意:perl-ExtUtils-MakeMaker 也是这些安装列表中的一员,不要由于显示的换行形成你们认为是两条执行命令。apache

二、下载Gitvim

选择一个目录,存放下载的git,例如个人是:/home/xuliugen/tmp,你们能够根据需求到官网下载相应的版本tomcat

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

三、解压git

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

这里写图片描述

由于下载的是一个zip,因此使用命令将其解压到git目录下:

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

四、编译安装git

进入git目录

这里写图片描述

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

make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install
  • 1
  • 2
  • 1
  • 2

五、配置Git

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

而后而已看到这个文件已经有不少配置了,只须要在最下边添加git的路径便可:

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

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

source /etc/profile
  • 1
  • 1

六、检验Git是否安装成功

git --version
  • 1
  • 1

这里写图片描述

2、Maven安装

一、下载和解压Maven

Maven的安装包下载能够根据需求找到合适的版本,解压以后,个人位置是:

这里写图片描述

二、配置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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

而后运行:source ~/.bash_profile 应用修改

三、查看Maven是否安装成功

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

这里写图片描述

3、Jenkins的部署

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

一、将jenkins放到Tomcat中并解压,启动Tomcat,成功启动以后访问ip和端口以下:

这里写图片描述

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

二、安装插件

在进行配置以前,因为使用的是Git拉去代码的方式,因此要首先安装插件

这里写图片描述

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

这里写图片描述

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

这里写图片描述

安装完以后,若是勾选了:安装完成后重启jenkins 那么会重启jenkins。

而后安装:GIT plugin,何上边的步骤同样,若是使用上述的方式,因为网络的缘由,可能会安装失败,这就须要咱们使用另外一种方式进行安装。

使用一样的方式在“可选插件”中搜索GIT plugin,找到以后点击蓝色连接(最好右键在新窗口中打开,放置覆盖jenkins界面)

这里写图片描述

会跳转到Git Plugin的插件信息地址:

这里写图片描述

能够看到Plugin ID为:git,而后在:http://updates.jenkins-ci.org/download/plugins/ 这地地方搜索(ctrl+f)便可找到,点进去,选择一个版本进行下载:

这里写图片描述

这里写图片描述

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

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

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

这里写图片描述

三、进行配置

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

这里写图片描述

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

这里写图片描述

四、Jenkins系统设置

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

(1)JDK,别名是任意的,选择本身jdk的位置,jenkins推荐使用sun jdk而不是openjdk

这里写图片描述

(2)Git 的配置

这里写图片描述

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

若是填错,后期回报没法找到git等错误(最下边,其余问题下的第三个问题),请你们注意!

(3)Ant的配置

因为本次并无用到Ant,不作配置,你们能够根据配置进行设置

(4)Maven的配置,选择本身maven的存放位置

这里写图片描述

(5)Jenkins Location

这里写图片描述

这里配置的是ip加端口和一个路径名称,邮箱要进行设定,后期会发送jenkins执行的结果到邮件中

(6)邮件通知

这里写图片描述

这里我配置的QQ邮箱,你们根据状况进行设置相应的smtp服务器,用户名、密码分别为本身的QQ邮箱何密码,若是不进行设置,后期jenkins构建项目的时候会报错,报错信息很好理解也很好找到是没有配置邮件的问题。

首先,要保证邮件的smtp和pop是开启状态的,这样的话才能够经过验证:

这里写图片描述

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

五、Configure Global Security

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

这里写图片描述

点击应用 保存以后,而后在屏幕的右上角,有一个登陆-注册 ,点击注册便可实现用户的登陆。

这里写图片描述

这里,若是是公司内网的话,或者最后搭建的jenkins是公司使用,那么最好用户名和密码为公司的帐户密码,邮件也是公司的邮件,这样的话方便后期的操做。

至此Jenkins的基本配置完成。

建立Job

一、建立项目

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

这里写图片描述

点击进去

这里写图片描述

点击:建立一个新任务

这里写图片描述

选择maven项目,点击OK,这里的Item名称是后边须要用到的,下边的配置也有用到这个的,你们能够很好的对应。

二、进行项目的配置

(1)源码管理选择Git,这个时候添加url以后,下边会报错,显示让去认证,认证便可(其余的安装中又遇到这个问题),若是认证失败,请下载认证Github Authentication plugin插件,这个在插件管理的可选插件中搜索安装。

我这里的rul是我在gitos上的一个项目,credentials是我在gitos上的用户名和密码认证。

这里写图片描述

(2)构建触发器,就是何时执行jenkins的自动化部署

这里写图片描述

选择第一个,其余的基本是定时执行什么的,你们能够自行查找,查看如何设置,根据须要进行配置

(3)Post Steps

这里写图片描述

选择上图中的,而后下边 的Execute shell以下,脚本的编写在下边进行了详细的说明:

这里写图片描述

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


export JAVA_HOME=/opt/tools/jdk1.7.0_67
export CATALINA_HOME=/opt/tools/apache-tomcat-7.0.70
export BUILD_ID=dontKillMe


tomcat_path=/opt/tools/apache-tomcat-7.0.70
war_name=webTest.war 
#war_path=http://132.153.131.237/:8022/jenkins/job/ManenDemo/ws/targetserver_port=8082 
file_path=~/.jenkins/jobs/test/workspace/webTest/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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

(4)邮件通知

这里写图片描述

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

(5)当即构建

点击左上角的当即构建

这里写图片描述

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

这里写图片描述

下边是进行jar的下载,会下载到宿主服务器的maven仓库中:

这里写图片描述

下边的信息表示项目编译经过:

这里写图片描述

下边是运行脚本的信息:

这里写图片描述

脚本的分析

在Jenkins的服务器上查看:

这里写图片描述

这里写图片描述

能够看到在/root/.jenkins这个目录,实际存放了Jenkins拉取Git代码以后编译好war的位置,到此,你们也许都该明白了,编译后的位置就在这里啊!而后,接着是部署到宿主服务器的Tomcat容器中,如何将编译好的war放到tomcat中,这就须要脚原本完成,也是上述过程当中配置的过程,下边对每一行进行分析。

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

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

#!/bin/bash 
  • 1
  • 1

二、环境变量设置

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
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

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

export BUILD_ID=dontKillMe这一句很重要,由于该job启动完后执行下一job,jenkins直接把tomcat进程杀了,因此不管脚本中怎么写了启动tomcat的命令,他是不会启动的。虽然上述截图中显示了Tomcat started、server restarted可是访问项目地址是访问不了的,这在:其余问题的第二个说明了这个问题。

三、其余路径位置

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 #宿主服务器的ip何端口
file_path=~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target  #编译好的war包存放地址
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

这个:war_path 其实也就是Jenkins的宿主服务器位置IP,端口为jenkins运行的端口,你们只须要将ip地址端口ManenDemo换成本身的便可;

file_path:就是Jenkins帮咱们编译好的项目war的位置,上图中你们也能够看到,而且你们不能够彻底按照上边的路径,要找到本身宿主服务器上实际war的位置,进行设置。

四、耳熟能详的执行命令

下边就是咱们在使用原始方式,部署war的命令,你们很简单的能够理解,其中:

注意:我的写脚本的能力有限,因此我是假设项目已经在运行的状况下,所以我上来就是先关闭Tomcat,(正确的方式,应该判断端口是否打开,若是自己tomcat未启动,个人这种状况,会在Jenkins的Console中报拒绝链接的问题,以下图)。

这里写图片描述

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

下边的脚本就是删除原来容器中的文件,而后将编译好的war移动到容器中,解压。运行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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

将项目布署到远程Tomcat

上述建立项目,能够看出是在本地进行执行的,也就是进行编译后执行的Tomcat是何Jenkins的宿主服务器是在一块儿的,这很显然不符合咱们常规的公司及其部署的方案,一般是将编译以后的代码在运行到其余的Tomcat服务器中的,下边有两种方式,将编译以后的项目部署到远程服务器中。

一、使用脚本的方式部署到远程服务器

二、使用Deploy to container Plugin插件部署到远程服务器

插件下载地址:http://updates.jenkins-ci.org/download/plugins/deploy/1.10/deploy.hpi

上述的开始阶段就安装了这个插件,下边就开始发挥其做用。

这里写图片描述

在建立的Job左侧点击设置,其余配置何在远程搭建项目是一致的,不一样的是在这个地方:

这里写图片描述

之前咱们在编译以后,将编译后的经过脚本补助到Jenkins的宿主服务器,使用插件,就不须要这种方式了。

这里写图片描述

还有就是的在构建以后,将编译后的文件**/target/dubbo-provider.war(就是上边的~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target目录)部署到下边的远程Tomcat容器中;这里Containers的用户名和密码是Tomcat管理员的帐户密码,Tomcat URL 就是你须要进行部署的远程Tomcat服务器的ip和端口。

这里须要进行设置的是远程Tomcat的管理员信息,修改远程Tomcat容器下的conf–tomcat-users.xml文件,在内添加下边的内容:

注意 manager-script 这个必须得有,否则的话这个用户就没有操做脚本的权限了。

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin,manager,manager-script,manager-gui"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

便可实现远程的访问,测试是能够经过的,可是有一个问题,经过这种方式,只将war复制到了wenapps下:

这里写图片描述

所以这种方式的话,咱们访问的时候必须是ip、端口和项目名,例如:

http://115.159.151.247:8030/dubbo-provider/
  • 1
  • 1

固然这种方式 也是在实际的应用中不提倡的,解决方式就是修改Tomcat默认的访问路径便可,设置Tomcat–conf–server.xml文件以下: 
在Host节点之间添加:

<Context path="" docBase="dubbo-provider" debug="0" reloadable="true" />
  • 1
  • 1

这里写图片描述

或者在docBase里边输入项目的绝对路径,例如个人:

<Context path="" docBase="/home/xuliugen/dubbo-provider/webapps/dubbo-provider" debug="0" reloadable="true" />
  • 1
  • 1

而后重启Tomcat,这样的话,http://ip:8030/dubbo-provider/ 和http://ip:8030这两种方式均可以访问到该项目。

这里写图片描述

这里写图片描述

其余问题

一、部署项目的时候报错

这里写图片描述

这个你们很好理解,是由于下载jar失败的问题,因为是第一次使用Maven,须要第一次下载不少jar到Maven仓库中,因为网络的问题下载失败,你们能够屡次构建让他从新下载,或者直接到:https://repo.maven.apache.org/maven2 根据报错的jar,在maven2中找到本身缺失的jar,而后在/root/.m2/repository 相应的位置添加jar便可。

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

就是上边说道的问题了: 
添加:export BUILD_ID=dontKillMe,由于该job启动完后执行下一job,jenkins直接把tomcat进程杀了,因此不管脚本中怎么写了启动tomcat的命令,他是不会启动的。

三、遇到下边的问题

这里写图片描述

这就是在系统设置的时候,设置的git的地址不对,上述已经说明了,应该是git的可执行文件的地址,若是只是git的目录,是没法找到git这个可执行文件的,以下:

这里写图片描述

能够看出使用的是这个:/usr/local/git/bin/git 进行git仓库的配置何代码的拉取,所以这设置git的目录,jenkins默认是不会找bin目录下的git可执行文件的。

至此,Jenkins的部署完成,但愿对你们有所帮助。