• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<四>Jenkins实战应用–Jenkins一个项目的构建

Jenkins eryajf 9个月前 (03-24) 21°C 已收录 15个评论
本文预计阅读时间 18 分钟

*系列汇总*

这是一个系列文章,大大小小到今天惊然发现竟然已经累计二十篇了,也就不得不做一个小汇总。回想当初写第一篇文章的时候,就已经决心事无巨细,一应认真的走下来,回头遮望,看着皇皇这么多文章,一股强烈的成就感就此油然而生,于是便有了这些汇总整理。在这个过程当中,好像也帮助过不少的人,这是让我尤其开心的事情,同时也结识了一些志同道合的朋友,再没有比这更让人觉得愉悦的事情啦!也希望以后写出更多类似的系列文章。

文章汇总地址如右:Jenkins 入门教程。

如果相中哪个,点击进去便是。希望正在读这段话的你能够在这个小系列中获得自信以及喜悦!

絮叨几句

在上一篇的文章当中,基本上准备工作都做好了,现在就来真刀真枪来进行项目的构建了,在做真正的项目构建之前,有一些简单的准备工作还是要做的。

我这里就用公司里边的 Java 项目,全程演示一遍怎么完成这里边的配置。而如果是其他的诸如前端啊,PHP 之类的项目,则就更简单了,ok,先来做一些准备工作。

服务器配备:

Jenkins 192.168.96.26
Gitlab 192.168.96.27
Nexus 192.168.96.28
MySQL 192.168.96.29
Test Tomcat 192.168.96.17

这个地方看似需要准备的挺多的,其实很多都是已经搞好了的。中间的三个基本上都是我们搭建好了之后,交付给开发人员或者 DBA 让他们进行操作,我们这里讲的,就只是对 Jenkins 以及另外一台上的 tomcat 之间的项目关系。

很多时候就是这样,把 Jenkins 作为单独的服务器,然后其他的服务器上,可能会有四到五台的 tomcat 来进行测试,这里模拟的就是这种测试环境,很多时候看到的网上的教程都是在 Jenkins 服务器本地直接进行的构建,其实都是一个道理,只要弄通了这整个流程的来龙去脉,能够抓住不变的东西,那么任凭其他的再怎么变,也都不足担心。

现在需要在要操作的服务器上做一些准备工作

vim /usr/local/maven/conf/settings.xml

接着还需要将 maven 像 jdk 那样把环境写入到系统配置当中,不然等会儿编译可能会报错。

vim /etc/profile

在最底下添加。
# maven 所在的目录
export M2_HOME=/usr/local/maven
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

现在,终于,可以,进行一个项目的配置了。

配置开始

来到 Jenkins 界面中。

输入项目的名称,选中构建一个自由风格的项目。


插曲:大家可能看到这张图带有水印与其他的不一样,因为这张是修改过程中后补上来的。在此要感谢一下读者 cooki 同学,详细情况在下边留言当中已有表明。嗟乎,人生能有这样的读者,夫复何求!!!


回归正题。

也可以在最低下复制其他的项目名称,直接 copy 其他的项目的配置,这样会省去很多相同的操作,非常 nice。

点击确定,进行下一步

选择参数化构建过程,这里都是拿干货来说了,其他不重要的,可以自己进行测试着玩。
最后配置出来是这个样子

基本上这样就能够满足测试之需求了,注意这里边的名称都是可以作为参数进行传递的。一般项目都是有部署与回滚的功能,而在部署当中,添加一个 Git 分支的选择,这对于开发来讲,是非常必要的。

接下来是代码管理

我们这里用的是 Git 代码库,首先把项目的链接复制过来,然后需要添加一个能够登陆的用户,下边 add 添加一个就行,如果这个地方总是返回 128 错误,应该是 Jenkins 添加秘钥到 Git 了,但是还没有进行过登陆的确认,这个时候到服务器上进行一次代码的 clone,然后就会看到这个地方的报错消失了。

这个时候,先不做其他任何操作,我们直接保存设置,然后进行一次构建看看再说。

点击进去

如果是第一次构建,那么这个地方会从 nexus 库当中下载很多需要的依赖包,但是这些并不是我想展示出来看的,真正想看到的是,Jenkins 会在自己的工作目录当中创建这样一个项目,然后将所有的代码给拉取过来,随后进行编译的动作。

这个就是刚刚创建的项目名称,进去之后就能看到源代码了。
源码当然是不能看咯,不过现在可以把目光拉到 Jenkins 刚才的构建界面来。

这个构建项目需要依赖于 antx.properties 这个配置文件但是第一次构建还没有这个文件,因此会提示让更新一下,而 Jenkins 的 web 界面又是不提供这种交互功能的,于是来到服务器上进行编译并更新。(注意,以后如果开发人员再次对这个文件更新或者更改,部署的时候可能还会出现这样的情况,会一直提示让选择更新,却又选择不了,于是,需要告知开发人员,遇到这种情况,立马叉掉停止构建。)

到服务器上进入刚才的项目目录执行下边命令

mvn clean install -Dmaven.test.skip=true

稍等一会儿,会提示让更新:

输入 y q y 就行了,然后会保存在 root 目录下,如下图中所展示:

接着就会看到编译成功的界面

注意:现在这种操作逻辑呢,是 Jenkins 将代码从 Git 服务器拉去到 Jenkins 服务器上,然后在 Jenkins 服务器本机上进行编译的操作,比较建议这样的操作,因为 Jenkins 服务器相对于那些可能有四五个 tomcat 在跑着的服务器来说,压力会小很多很多,因此建议在 Jenkins 编译然后将 war 包同步到测试服务器。

编译完成之后,会在相应的目录下边生成一个 war 包,具体是什么目录,则由开发人员在代码当中定义的,不过一般规范化的话,会在 web/target 下

那么,再将这个包拷到测试服务器对应目录下,重启 tomcat 不就行了,事实上就是这样的,现在我们回到 Jenkins 的 web 界面来将这些事儿给完成了。

在构建界面找到 Execute shell,可能上级目录略有不同,但是找到这个就对了,将构建的脚本进去。脚本内容如下:

#!/bin/bash
#git checkout new_website_dev_20160430
#git pull
#mvn clean package -Dmaven.test.skip=true

APP_DIR=/usr/local/tomcat/WAR   #注意这个目录对方服务器(也就是 test tomcat 服务器)默认没有,需要创建

function MVN-SCP(){
chattr +i /root/antx.properties
cd $WORKSPACE
mvn clean install -Dmaven.test.skip=true
chattr -i /root/antx.properties

scp  $WORKSPACE/web/target/ROOT.war root@192.168.96.17:$APP_DIR/
[ $? -ne 0 ] && echo -e '\033[31m[ error ] Failed to scp the ROOT.war\033[0m' && exit 1
sleep 1
}

function deploy()
{
echo "MVN & SCP"
  MVN-SCP
  sleep 3
ssh root@192.168.96.17 "echo "调用部署" && /usr/local/scripts/deploy.sh $mode"
}

function rollback()
{
ssh root@192.168.96.17 "echo "调用部署" && /usr/local/scripts/deploy.sh $mode"
}

case $mode in
 deploy)
        deploy
        ;;
 rollback)
        rollback
        ;;
 *)
        echo $"Usage: $0 {deploy|rollback}"
        exit 1
        ;;
esac

这里的脚本主要就是完成两件事情,首先把本地拉取的代码进行编译,然后把编译好了的 war 包传到远程 tomcat 服务器,接着调用远程服务器的部署脚本(这个脚本下边会列出),这些操作都并不复杂,如果对 Linux 服务器所有目录结构以及 shell 脚本熟悉的话。更多的,则就是细心的配置了,很多时候出问题,基本上都是变量不统一或者脚本调用有误。

刚才说了部署的时候调用了一下远程的部署脚本,那么在远程服务器上的脚本是怎样的呢,是这样的:

#!/bin/bash  
source /etc/profile  
tomcat_dir=/usr/local/tomcat  
bak_dir=$tomcat_dir/WAR_backup  
date=$(date +"%Y%m%d%H%M%S")  
stop_tomcat(){  
   ps aux |grep tomcat|grep -v grep|awk '{print $2}'|xargs kill -9  
}  
start_tomcat(){  
   /bin/bash  $tomcat_dir/bin/startup.sh  
}  
 
deploy(){  
echo "stop_tomcat"  
   stop_tomcat  
     
 echo "backup_war"  
 [ ! -d $bak_dir ] && mkdir -p $bak_dir  
   cp $tomcat_dir/webapps/ROOT.war $bak_dir/ROOT_$(date +"%y%m%d%H%M%S").war && \mv $tomcat_dir/webapps/ROOT.{war,warbak}  
 echo "rm -rf $tomcat_dir/webapps/ROOT"  
   rm -rf $tomcat_dir/webapps/ROOT && mv $tomcat_dir/WAR/ROOT.war $tomcat_dir/webapps/  
   sleep 2  
 
 echo "start_tomcat"  
   start_tomcat  
   sleep 10  
}  
 
rollback(){  
 echo "stop_tomcat"  
   stop_tomcat  
   sleep 2  
 
 echo "rollback"  
   rm -f $tomcat_dir/webapps/ROOT.war && rm -rf $tomcat_dir/webapps/ROOT  
   cp $tomcat_dir/webapps/ROOT.{warbak,war}  
 
 echo "start_tomcat"  
   start_tomcat  
   sleep 10  
}  
 
case "$1" in  
'deploy')  
   deploy  
   echo "deploy success!!!"  
;;  
'rollback')  
   rollback  
   echo "rollback success!!!"  
;;  
*)  
   echo "Usage: $0 {deploy | rollback}"  
   exit 1  
esac 

而这个脚本的内容也是非常简单的,无论是部署还是回滚,都首先把服务停掉,然后进行 war 的对应操作,最后再启动服务。

如果说这个地方 tomcat 启动失败。那么就从前往后一步一步捋,先看 Jenkins 构建是否正常,然后再看 tomcat 启动日志,数据库连接是否正常,相关的环境配置是否妥当。

需要注意一点:这个脚本放置的位置需要与上一个脚本里边指向的位置(/usr/local/scripts)以及名称(deploy.sh)相同。

当然,这个地方的两个小脚本,只是作为一个示例来讲解出利用脚本与 Jenkins 的配合,实际生产还应该结合自己环境情况进行不同的调整。

那么,整个一系列的部署就是这个样子的。

最后,摘抄一段网上看到的表述 Jenkins 优点的几点:
摘抄自 http://blog.csdn.net/u013602835/article/details/54632843


weinxin
扫码订阅,第一时间获得更新
微信扫码二维码,订阅我们网站的动态,另外不定时发送 WordPress 小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<四>Jenkins实战应用–Jenkins一个项目的构建
喜欢 (6)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(15)个小伙伴在吐槽
  1. eryajf
    置顶易找。
    eryajf2018-06-17 11:24 回复 Windows 7 | Chrome 65.0.3325.181
  2. eryajf
    签到成功!签到时间:2018-07-29 12:21:29,每日打卡,生活更精彩哦~
    eryajf2018-07-29 12:21 回复 Windows 7 | Chrome 67.0.3396.99
  3. ╰⋛⋋や☆盛行☆や⋌⋚╯
    maven没有配置方法啊,是不是直接解压apache-maven-3.5.4-bin.tar.gz后,将文件移动到/usr/local/maven目录下,然后修改profile文件,就行了,这样就算是配置完成了?
    盛行2018-10-14 14:31 回复 Windows 7 | Chrome 66.0.3359.170
    • eryajf
      对的,maven的安装与jdk的安装方式基本上一样,都是解压,然后配置环境变量就行了
      eryajf2018-10-14 14:52 回复 Windows 7 | Chrome 70.0.3538.9
  4. ╰⋛⋋や☆盛行☆や⋌⋚╯
    git的那些打码了,选项怎么配置的?
    盛行2018-10-14 14:44 回复 Windows 7 | Chrome 66.0.3359.170
    • eryajf
      上边填写git的地址,然后是认证,接着是分支,参考第17篇文章里边的git配置即可
      eryajf2018-10-14 14:55 回复 Windows 7 | Chrome 70.0.3538.9