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

[经验分享] 搭建jenkins

[复制链接]
发表于 2018-1-8 12:44:49 | 显示全部楼层 |阅读模式
使用Jenkins配置Git+Maven的自动化构建

  实现背景:Jenkins通过给定的代码地址URL,将代码拉取到其“宿主服务器”(就是Jenkins的安装位置),进行编译、打包和发布到容器中。在Jenkins的宿主服务器中必须要有可以进行:代码clone(Git)、代码编译(Maven)、代码运行(Tomcat)的基本环境
  一、   安装Git
  1、安装依赖
  

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

  2、下载Git
  选择一个目录,存放下载的git,例如我的是:/home/test/,大家可以根据需求到官网下载相应的版本
wget https://github.com/git/git/archive/v2.3.0.zip


3、解压Git

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

unzip v2.3.0 -d git


  4、编译安装Git
  将其安装在“/usr/local/git”目录下,命令如下
make prefix=/usr/local/git all

sudo make prefix=/usr/local/git install

  5、配置环境变量
vim /etc/profile

  

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

source /etc/profile  

  

  6、检查是否安装成功
  

git --version  

  此处使用源码安装,也可以使用yum安装:yum –y install git
  二、        JDK、Maven安装
  1、  下载和解压Maven
  tar xf apache-maven-3.3.9-bin.tar.gz
  mv apache-maven-3.3.9 /usr/local/maven
  2、  安装JDK
  tar xf jdk-8u111-linux-x64.tar.gz
  mv jdk1.8.0_111/ /usr/local/java
  3、配置环境变量
  vim /etc/profile
  JAVA_HOME=/usr/local/java
  export MAVEN_HOME=/usr/local/maven
  export PATH=$PATH:$MAVEN_HOME/bin
  export JENKINS_HOME=/home/test/tomcat/webapps/jenkins
  JRE_HOME=/usr/local/java/jre
  JAVA_BIN=/usr/local/java/bin
  JRE_BIN=$JRE_HOME/bin
  PATH=$PATH:$JAVA_BIN:$JRE_BIN
  CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

  export JAVA_HOME JRE_HOME JRE_BIN JAVA_BIN PATH>  source /etc/profile
  4、检查是否安装成功
  java –version
  mvn –version
  三、          部署Jenkins
  1、  将jenkins的war包放到Tomcat中并启动Tomcat,成功启动之后访问ip和端口如下:


  2、  安装插件
  系统管理à管理插件à可选插件à过滤
  Deploy to container Plugin
  Maven Integration plugin
  SSH plugin
  Windows Slaves Plugin
  Email Extension Plugin
  Subversion Plug-in
  GIT plugin
  3、  Jenjins系统设置
  1)  系统管理àGlobal Tool Configuration



  4、Jenkins Location

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

  这里我配置的QQ邮箱,大家根据情况进行设置相应的smtp服务器,用户名、密码分别为自己的QQ邮箱何密码,如果不进行设置,后期jenkins构建项目的时候会报错,报错信息很好理解也很好找到是没有配置邮件的问题。
  首先,要保证邮件的smtp和pop是开启状态的,这样的话才可以通过验证:

  最后点击下边的应用、保存即可
  5、Configure Global Security
  然后回到系统管理,看到Configure Global Security 点击进去,根据下边进行配置即可

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

  这里,如果是公司内网的话,或者最后搭建的jenkins是公司使用,那么最好用户名和密码为公司的账户密码,邮件也是公司的邮件,这样的话方便后期的操作。
  至此Jenkins的基本配置完成。

创建Job
  1、创建项目
  点击登录之后,会看到下边的界面中:My Views

  点击进去

  点击:创建一个新任务

  选择maven项目,点击OK,这里的Item名称是后边需要用到的,下边的配置也有用到这个的,大家可以很好的对应。
  2、进行项目的配置
  (1)源码管理选择Git,这个时候添加url之后,下边会报错,显示让去认证,认证即可(其他的安装中又遇到这个问题),如果认证失败,请下载认证Github Authentication plugin插件,这个在插件管理的可选插件中搜索安装。
  我这里的rul是我在gitos上的一个项目,credentials是我在gitlab上的用户名和密码认证。

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

  选择第一个,其他的基本是定时执行什么的,大家可以自行查找,查看如何设置,根据需要进行配置
  (3)Post Steps

  Goals and options后填 clean package install   -DskipTests
  选择上图中的,然后下边 的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

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

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

  下边是运行脚本的信息:


脚本的分析
  在Jenkins的服务器上查看:


  可以看到在/root/.jenkins这个目录,实际存放了Jenkins拉取Git代码之后编译好war的位置,到此,大家也许都该明白了,编译后的位置就在这里啊!然后,接着是部署到宿主服务器的Tomcat容器中,如何将编译好的war放到tomcat中,这就需要脚本来完成,也是上述过程中配置的过程,下边对每一行进行分析。
  首先我们应该明白,将编译好的war放到tomcat容器中,我们首先要知道这两个的位置:编译后war的位置和目标容器的位置,很显然我们是知道的。
  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的命令,他是不会启动的。虽然上述截图中显示了Tomcat started、server restarted但是访问项目地址是访问不了的,这在:其他问题的第二个说明了这个问题。
  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 #宿主服务器的ip何端口  

file_path=~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target  #编译好的war包存放地址  

  这个:war_path 其实也就是Jenkins的宿主服务器位置IP,端口为jenkins运行的端口,大家只需要将ip地址端口ManenDemo换成自己的即可;
  file_path:就是Jenkins帮我们编译好的项目war的位置,上图中大家也可以看到,并且大家不可以完全按照上边的路径,要找到自己宿主服务器上实际war的位置,进行设置。
  4、耳熟能详的执行命令
  下边就是我们在使用原始方式,部署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"  

将项目布署到远程Tomcat
  上述创建项目,可以看出是在本地进行执行的,也就是进行编译后执行的Tomcat是何Jenkins的宿主服务器是在一起的,这很显然不符合我们常规的公司及其部署的方案,通常是将编译之后的代码在运行到其他的Tomcat服务器中的,下边有两种方式,将编译之后的项目部署到远程服务器中。
  1、使用脚本的方式部署到远程服务器
  采用ansible工具实现:
  1)、首先在jenkins服务器上安装ansible,安装方式见ansible安装文档。
  2)、在服务器上准备了两个脚本:一个是停tomcat脚本,一个是启动tomcat脚本;

  3)、在ansible的hosts文件(一般放在/etc/ansible/),添加tomcat端的主机ip、ssh端口、用户、密码。

  点击:创建一个新任务

  选择maven项目,点击OK,这里的Item名称是后边需要用到的,下边的配置也有用到这个的,大家可以很好的对应。
  2、进行项目的配置
  (1)源码管理选择Git,这个时候添加url之后,下边会报错,显示让去认证,认证即可(其他的安装中又遇到这个问题),如果认证失败,请下载认证Github Authentication plugin插件,这个在插件管理的可选插件中搜索安装。
  我这里的rul是我在gitos上的一个项目,credentials是我在gitlab上的用户名和密码认证。

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

  选择第一个,其他的基本是定时执行什么的,大家可以自行查找,查看如何设置,根据需要进行配置
  (3)Post Steps

  Goals and options后填 clean package install   -DskipTests
  选择上图中的,然后下边 的Execute shell如下,脚本的编写在下边进行了详细的说明:


  将ansible命令文件里面的内容根据自己的需要粘贴到上图中的command处。
  然后先点Apply—再点保存。
  保存完成后执行立即构建。
  2、使用Deploy to container Plugin插件部署到远程服务器
  上述的开始阶段就安装了这个插件,下边就开始发挥其作用。

  在创建的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文件,在内添加下边的内容:
  

<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"/>  

  即可实现远程的访问,测试是可以通过的,但是有一个问题,通过这种方式,只将war复制到了wenapps下:

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

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

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

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


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

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

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


其他问题
  1、部署项目的时候报错

  这个大家很好理解,是因为下载jar失败的问题,由于是第一次使用Maven,需要第一次下载很多jar到Maven仓库中,由于网络的问题下载失败,大家可以多次构建让他重新下载,或者直接到:https://repo.maven.apache.org/maven2 根据报错的jar,在maven2中找到自己缺失的jar,然后在/root/.m2/repository 相应的位置添加jar即可。
  2、编写脚本文件启动tomcat但是项目仍然运行不起来
  就是上边说道的问题了:
  
添加:export BUILD_ID=dontKillMe,因为该job启动完后执行下一job,jenkins直接把tomcat进程杀了,所以无论脚本中怎么写了启动tomcat的命令,他是不会启动的。
  3、遇到下边的问题

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

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

运维网声明 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-432918-1-1.html 上篇帖子: jenkins 配置 下篇帖子: Jenkins基本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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