Jenkins 是一款优秀的自动化构建服务器,利用jenkins可以帮我们解决重复繁琐的构建步骤,下面就来介绍如何搭建jenkins服务器以及如何配置项目自动化部署。

一、安装Jenkins

  1. jenkins的安装非常简单,本质就是一个可运行的war包,java程序员都不陌生;只要将这个war包放到tomcat容器即可运行起来;
  2. 官网下载Jenkins:https://jenkins.io/zh/
  3. 将下载的war复制到tomcat的webapps目录,然后将tomcat启动即可;tomcat启动后,直接访问:http://服务器ip:8080/jenkins就会看到Jenkins界面;
  4. 第一次打开会要求输入初始密码,初始密码在tomcat的logs目录中的catalina.out日志文件中可以找到;
  5. 将初始密码填入后即可进入安装插件页面,选择推荐安装即可;
  6. 稍等片刻插件即可安装完成,但可能会出现网络问题导致插件不是全部安装成功,可以多试几次,跳过也无所谓,可后面再离线安装;
  7. 创建登陆用户;
  8. 安装并初始化完成;

由于新的jenkins版本会默认携带中文翻译插件,翻译非常渣渣,还是英文看得舒服,所以我把它卸载了。

二、jenkins配置

1. 配置maven;

选择 系统配置--全局工具配置;

jenkins部署gitee springboot到ecs jenkins连接git部署_tomcat运行一段时间自动退出

填入服务器maven的settings配置文件路径;

jenkins部署gitee springboot到ecs jenkins连接git部署_jar_02

继续往下滑,找到maven项,填入maven目录。

jenkins部署gitee springboot到ecs jenkins连接git部署_jenkins自动部署_03

2. 配置jdk;

同样在全局工具配置下面;

配置java home即可,name即可。

jenkins部署gitee springboot到ecs jenkins连接git部署_启动jenkins_04

3. 创建一个新任务;

jenkins部署gitee springboot到ecs jenkins连接git部署_启动jenkins_05

选择第一个,名称随意,然后点击OK;

jenkins部署gitee springboot到ecs jenkins连接git部署_jenkins自动部署_06

配置git仓库,用于拉取最新代码;

jenkins部署gitee springboot到ecs jenkins连接git部署_jenkins启动_07

添加构建步骤;

jenkins部署gitee springboot到ecs jenkins连接git部署_启动jenkins_08

选择刚刚配置的maven;

jenkins部署gitee springboot到ecs jenkins连接git部署_启动jenkins_09

填入构建命令,就是maven的构建命令;

jenkins部署gitee springboot到ecs jenkins连接git部署_jenkins自动部署_10

继续添加步骤,选择执行shell;

jenkins部署gitee springboot到ecs jenkins连接git部署_jenkins启动_11

编写shell脚本,将maven打包出来的部署产物(jar包)启动起来;

jenkins部署gitee springboot到ecs jenkins连接git部署_启动jenkins_12

最后点SAVE保存,至此全部配置以完成。

三、shell脚本编写思路

这里有必要解释一下shell脚本该如何编写,先把脚本贴出来,脚本很简单,理解其思路即可;

#!/bin/bash
\cp -rf /root/.jenkins/workspace/auto-comment/target/auto-comment-0.0.1-SNAPSHOT.jar /data/javaproject/auto-comment/
ps -ef | grep auto-comment-0.0.1-SNAPSHOT.jar | grep -v grep | cut -c 9-15 | xargs kill -9
cd /data/javaproject/auto-comment/
cat /dev/null > auto-comment.log
nohup java -jar auto-comment-0.0.1-SNAPSHOT.jar > auto-comment.log 2>&1 &

successd="comment data is load!"
timeout=120

echo "项目构建完成,启动中..."
second=0
while [ true ]; do
/bin/sleep 1

if [ $second -eq $timeout ];then
     echo "启动失败!"
    exit 1
fi

 while read line
 do
    if [[ $line =~ $successd ]];then
        echo "启动完成!"
        break 2
    fi
 done 
second=`expr $second + 1`

done

具体思路:

  1. 我们知道,通过前面的配置(shell脚本之前的配置),jenkins会帮助我们从git上拉取最新的java代码,然后执行我们配置的build构建步骤第一步,也就是会将最新的项目进行打包,这里是得到jar包——auto-comment-0.0.1-SNAPSHOT.jar;
  2. jenkins打好的包,默认会放在/root/.jenkins/workspace/任务名称/target/xxxx.jar,我这里是/root/.jenkins/workspace/auto-comment/target/auto-comment-0.0.1-SNAPSHOT.jar ,知道路径过后将这个jar复制(存在则覆盖)到指定目录/data/javaproject/auto-comment/下;
  3. 通过ps命令和grep命令,截取到原来正在运行的jar的pid,然后把它kill掉;
  4. 然后重置项目运行的日志文件,cat /dev/null > auto-comment.log
  5. 再后台重新启动jar,并输出日志到auto-comment.log中,nohup java -jar auto-comment-0.0.1-SNAPSHOT.jar > auto-comment.log 2>&1 &

(后面shell代码作用就是通过定时读取这个文件的内容)

  1. 项目启动之后,通过间隔一秒钟的while循环,去读取auto-comment.log文件中的内容,当auto-comment.log中包含了指定的文本片段,即可认为启动成功,这里的指定文本片段为"comment data is load!",可根据自己项目找到启动成功的日志标识;
  2. 最后打印“启动完成!”,跳出while循环。

注意:shell脚本中还做了超时处理,即当second变量累加到120秒时,也退出while并终止shell脚本,就是为了避免项目启动失败,一直没有打印成功标识的日志。终止shell命令是exit,默认参数是0,代表shell执行成功,此时Jenkins构建结果会变为Finished: SUCCESS,所以启动超时或失败时,我们要设置一个参数exit 1,这样Jenkins构建结果就会变为Finished: FAILURE。

四、构建演示

回到主页面,点击右侧的构建图标即可;

jenkins部署gitee springboot到ecs jenkins连接git部署_启动jenkins_13

jenkins部署gitee springboot到ecs jenkins连接git部署_tomcat运行一段时间自动退出_14

jenkins部署gitee springboot到ecs jenkins连接git部署_jenkins自动部署_15

部署完成。