1、创建项目
点击登录之后,会看到下边的界面中:My Views
点击进去
点击:创建一个新任务
选择maven项目,点击OK,这里的Item名称是后边需要用到的,下边的配置也有用到这个的,大家可以很好的对应。
2、进行项目的配置
设置job权限
3.构建版本设置
3.添加git构建源码
这个时候添加url之后,下边会报错,显示让去认证,认证即可(其他的安装中又遇到这个问题),如果认证失败,请下载认证Github Authentication plugin插件,这个在插件管理的可选插件中搜索安装。
我这里的rul是我在gitos上的一个项目,credentials是我在gitos上的用户名和密码认证。
4.构建触发器,
就是什么时候执行jenkins的自动化部署
选择第一个,其他的基本是定时执行什么的,大家可以自行查找,查看如何设置,根据需要进行配置
5 Post Steps 构建后自动部署到tomcat
选择上图中的,然后下边 的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"
6 邮件通知
至此基本设置完毕,点击应用、保存
7 立即构建
点击左上角的立即构建
然后看到下边的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 #系统jdk目录
export CATALINA_HOME=/home/xuliugen/tomcat export
CATALINA_BASE=/home/xuliugen/tomcat 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://59.38.25.156:8081/jenkins/job/ManenDemo/ws/targetserver_port=8081#宿主服务器的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 ------停止
tomcat sleep 3s ------等待
3s echo "rm -rf ${tomcat_path}/webapps/ROOT/" ------ 删除ROOT下所有文件
rm -rf ${tomcat_path}/webapps/ROOT/ ------------ 删除ROOT下所有文件
cd $file_path------ 进入jiks生成war包的位置
cp ${war_name} ${tomcat_path}/webapps/ROOT/------ 复制war包到tomcat cd $tomcat_path/webapps/ROOT/------进入ROOT目录
unzip ${war_name}------解压war包 rm -rf ${war_name}------删除war包
sleep 5s ------等待5s cd $tomcat_path/bin/------进入tomcat目录
./startup.sh------启动tomcat echo "部署完成提示"