操作环境
OS centos7.3
JDK jdk1.8
maven maven3
当然这篇文章的前提是你已经在服务器上安装部署了jenkins,如果没有可以看我的另一篇文章
https://www.jianshu.com/p/ebeebcb8aafb
首先列出所用到的所有命令,并予以解释
#jenkins 启动
systemctl start jenkins
#jenkins 停止
systemctl stop jenkins
#jenkins 重启
systemctl restart jenkins
#更改相关jenkins服务文件后 需要执行重新加载服务的命令
systemctl daemon-reload
#创建系统用户命令
useradd username
#更改文件夹组权限
chown -R username:username xxx
进入正文
步骤: 安装必要的插件 => 设置jenkins全局变量 => 更改运行用户 => 创建任务 => 配置任务 => 编写shell脚本 =>Run
1、 安装必要插件
直接运行jenkins后,打开http:/你的IP:设置的端口/pluginManager/ 即 系统管理 => 管理插件
插件管理界面
在搜索框分别输入,有如下作用的插件进行安装
#maven编译插件
Maven Integration
#构建后脚本执行插件
PostBuildScript Plugin
#subversion插件
Subversion Plug-in
2、 设置jenkins全局变量
jenkins在创建任务时需要一些全局变量 对应svn地址的svn账号密码 JDK路径 maven路径
此项可以留到配置任务环节再进行
3、更改jenkins在操作系统运行的用户
这一步是为了为后面编写shell脚本,提供足够的权限;提高系统安全性。
#使用useradd命令创建一个系统用户
useradd userjs
#停止jenkins服务
systemctl stop jenkins
# 打开配置文件
$ vi /etc/sysconfig/jenkins
# 修改$JENKINS_USER变量为userjs
JENKINS_USER="userjs"
#修改Jenkins相关文件夹用户权限(必须修改)
$ chown -R userjs:userjs /var/lib/jenkins
$ chown -R userjs:userjs /var/log/jenkins
$ chown -R userjs:userjs /var/cache/jenkins
#更改相关jenkins服务文件后 需要执行重新加载服务的命令(这一步非必须得视情况而定)
systemctl daemon-reload
#jenkins 启动
systemctl start jenkins
4、 创建任务
在浏览器打开你的jenkins界面,点击左侧的 新建任务 进入新建任务页
新建任务页
输入任务名称(最好英文)
点击 构建一个maven项目
点击确定按钮
创建任务完成
5、配置任务
在配置任务界面可以看到一排tab切页
任务配置界面
这里红色箭头的都是重点关注的,其他先可以不用关注
下面就开始一步步配置
①General
设置构建丢弃②源码管理
源码管理这个地方需要注意了,如果你是第一次配置的话,需要在c步骤点击按钮去另外的界面添加,你要拉取的项目的svn账号密码信息
全局变量
然后,在b步骤里面选择你刚刚添加的那个条目
③Build
构建这个环节是比较重要的,这里我们分两种类型的示例
a:单模块项目 b多模块聚合项目
b:整个项目就一个pom.xml文件
b:整个项目有多个pom.xml文件 通常的文件构造如下
多模块聚合项目分情况配置
a
单模块项目编译配置b
多模块聚合项目这里只需要配置 聚合项目的父级pom即可,因为父级项目里面指定了其他模块,所以maven会按照pom指定的顺序去编译
④构建后操作
选择构建后操作步骤选择脚本方式
添加generic shell脚本文件路径以及触发事件
现在我们还没写脚本,所以,可以先写一个路径例如/opt/script/test.sh
6、编写shell脚本*****重点
现在相当于准备好了前4步,滴5步只有一半
准备好了前4步,就相当于 我们在利用jenkins 在服务器/var/lib/jenkins/workspace/你的项目名
拉取了一个svn项目 ,并且,利用maven编译 先后执行了 mvn clean 和mvn install 生成了xxx.war文件
需求点
在这一步我们要做的事情是,将这个新生成的war文件放到服务器上指定的tomcat下面,然后启动tomcat服务器,完成自动部署
首先我们来用文字分解一下这个步骤,再进行脚本的编写
①停止正在运行中的tomcat
停止tomcat相信大家都会,但是由于各种原因tomcat原生的shutdown.sh可能经常不能关闭掉tomcat自己本身,所以需要我们去加点料,详细见我的另一篇文章https://www.jianshu.com/p/39a2da8db269
②将jenkins工具帮我们生成的war放到指定的tomcat下
这一步又可以分解一下,因为tomcat下是会有旧war的存在,这就需要我们去备份这个,然后再删除,最后换新:
a.将原有war移动到指定的目录下备份,一般存一份即可
b.删除旧war
c.将新生成的war移动到tomcat webapps下
③启动tomcat
执行tomcat的startup.sh
好的,正常情况下就是这些步骤了,但是按照这个写的脚本可不一定能够正常实现我们的诉求
重要 可能会出现的情况
以我们现在配置的userjs用户的权限,可能不能去执行我们写的脚本,理由很简单 这个用户没有权限,当然给他放大一些权限也是可以的,但是我们生产环境肯定不能这么做的,我们需要一个解决方案,让我们这个用户暂时对某些文件拥有超级权限
说的有点多了,接下来开始放上我的脚本
#!/bin/sh
sh /usr/local/tomcat8/bin/shutdown.sh
echo "执行完tomcat8关闭!!!"
cp /var/lib/jenkins/workspace/xxx/target/xxx.war /usr/local/tomcat8/webapps/
if [ -f "/usr/local/tomcat8/webapps/xxx.war" ];then
echo "xxx.war到/var/tomcat8_bak/"
\cp /usr/local/tomcat8/webapps/xxx.war /opt/tomcat8_bak/
if [ -d "/usr/local/tomcat8/webapps/xxx/" ];then
rm -rf /usr/local/tomcat8/webapps/xxx/
rm -rf xxx.war
echo "已删除tomcat下xxx相关"
else
echo "tomcat下没有xxx相关"
fi
else
echo "xxx.war文件不存在不能正常备份"
if [ -d "/usr/local/tomcat8/webapps/xxx/" ];then
rm -rf /usr/local/tomcat8/webapps/xxx/
echo "已删除tomcat下xxx相关"
else
echo "tomcat下没有xxx相关"
fi
fi
sh /usr/local/tomcat8/bin/startup.sh && tail -f /usr/local/tomcat8/logs/catalina.out
这个文件就可以实现将新生成的war放到指定tomcat下,备份旧war
接下来还有最后一件很重要的事情
为jenkins的宿主用户userjs指定可以运行我们这个脚本的超级权限
#给予我们这个userjs 运行我们脚本的所有权限
#进入sudo编辑文件
visudo
#添加如下内容 写上你脚本的路径,两个脚本的话用逗号隔开注意中英文切换,一个脚本的话只取第一个逗号之前的内容
##jenkins
userjs ALL=NOPASSWD: /opt/tomcat1.sh,NOPASSWD: tomcat2.sh,
OK,还有最后一步 将我们写好的sh配置到第5步的构建后脚本路径那里,内容为
sudo /opt/tomcat1.sh
7、Run
点击立即构建 左下角就会出现进度条 点击进度条旁边的查看控制台信息,就能看到脚本输出的信息
test任务
网友评论