上一篇文章主要介绍了jenkins和gogs的安装,这一篇重点介绍如何实现JavaWeb项目的自动化部署。

我们的目标是把war包传到应用服务器上,然后关闭tomcat,再启动tomcat。先看下面我们的打包流程。

9a592b24760b44970d130cea43e37f60.png

这里对B、C两步做下说明,tomcat是装在root用户下的,我们的应用服务器做了限制,只能直接ssh登录到普通用户,然后手动切换到root用户。

在使用自动化部署之前我们是纯手动做这些操作的,使用了自动化部署以后我们只需要点击“立即构建”,工具将自动为我们完成这些步骤。

在正式开始之前,我们先做些准备工作。

一、准备工作

登录到jenkins首页后我们需要安装常用的几个插件。

054c54fa8ff77cbb6ec8c6c70fd85ff8.png

安装如下几个插件:

Maven Release Plug-in

Publish Over SSH

Gogs

Deploy to container

接着系统管理—-》全局工具配置,配置git命令的目录,如果你不知道git命令的目录在哪里,输入linux命令whereis git

c6d87033084543745a0ea75471bb71ec.png

二、jenkins+gogs自动化部署

前期所有的工作准备好后,接下来开始正式步入主题。

1、新建任务

点击jenkins首页左边栏的“新建任务”,输入任务的名字后点击“确定”

73d244cb48e1496caf1bd34c155f8dc9.png

2、配置代码仓库

df36835c3efdf0526c9eb1fb2545545e.png

输入项目的地址后会出现如上错误,这是因为没有配置公钥。

我们需要把服务器中的公钥添加到gogs中。

登录自己服务器,切换到root账户,输入命令ssh-keygen -t rsa 一路回车,然后cd ~/.ssh cat id_rsa.pub 复制出里面的内容。

接着打开gogs页面,点击右上角的头像—-》用户设置—-》SSH密钥—-》增加密钥,输入任意名字(我是以服务器ip命名),把上面复制的密钥拷贝过来。

把私钥配置到jenkins中。

54be8d90dd160bbb42a4f8c491b334c3.png11616706a71fe870d93ef54eac8bf0ae.png

添加后然后选择我们刚刚添加的私钥,发现不报错了

0ff8629ead81a0d5b9e039c41b6abd8a.png

3、配置Build选项

49c1dea3386af7859c466ce6b8ad0362.png

clean package -Dmaven.test.skip=true

所有的都配置好后我们点击底部的“保存”,回到项目页面,点击左边的“立即构建”

c47b2c774cae6a0823a0d39ec24a49ec.png

上图是我们正式项目的构建记录。到这一步如果构建没问题,会在/var/lib/jenkins/workspace/test/target 这个目录下看到我们编译后的war包。

到目前为止,我们只是完成了文章开头定的目标中的A步。我们接着往下走,来完成我们未完成的目标。

4、接下来我们就借助强大的 Send build artifacts over SSH插件来完成我们后续的所有目标

01f80331e3c2e16199b244d6e36484f0.pngf099de5a623a6ec31204528e89738487.png

默认如果没有配置过ssh,这里的Name是空的,如果不知道Name后面选什么,可以点击最右边的问号寻求帮助。

这里我们的重点就是配置ssh免密登录。可能有人会问免密登录是什么意思,不好意思,请百度之~。

我们的目标是要实现将war包传到应用服务器上并重新启动tomcat。所以这里我们要配置怎么样才能免密登录到应用服务器上。记得先保存下刚刚的配置。

c6d2403561a65e276eaf8d5bd1c646c6.png

进入系统设置页面后滚动到页面底部,我们会看到如下配置

b23438d90e18a040e479b732950359a8.png

需要把宿主机(jenkins所在的服务器)上的私钥(上面配置git的时候有说到)拷贝到key那里。

66dbc0c749f5c5c5486dfe4d2ed42bbb.png

如果点击Test Configuration出现了Success,那说明能成功免密登录到应用服务器的jenkins账户下。接着再回到项目的配置页面,回到我们这一步的开头那里,选择配置好的ssh server。

Source files:这个是相对目录,相对于/var/lib/jenkins/workspace/test/ 这个目录,可以看我上面的配置

Remote directory:这是上传到jenkins账户后的目录,如/home/jenkins/csm

Remove prefix:这个意思是移除前缀目录,要不然拷贝到应用服务上会在Remote directory目录后面追加

重点就是Exec command,用脚本实现我们的CDEF这几步。

sudo su <

sleep 5s

#sh /usr/local/tomcat/apache-tomcat-8.5.20/bin/shutdown.sh > /dev/null 2>&1 &

#sleep 3s

ps -ef|grep apache-tomcat-8.5.20|grep -v grep|awk '{print $2}'|xargs kill -9

sleep 5s

rm -rf /usr/local/tomcat/apache-tomcat-8.5.20/myapp/ROOT

rm -rf /usr/local/tomcat/apache-tomcat-8.5.20/myapp/runplat/App.war

cp /home/jenkins/csm/App.war /usr/local/tomcat/apache-tomcat-8.5.20/myapp/runplat

BUILD_ID=DONTKILLME

echo "start tomcat...."

nohup sh /usr/local/tomcat/apache-tomcat-8.5.20/bin/startup.sh &

echo "start tomcat successful"

EOF

到这里基本上是大功告成了,这里容易出错的地方是ssh的配置,出现问题多百度和谷歌看看。

另外脚本那块也容易出错,大家如果有好的脚本不妨也写出来资源共享下。

保存退出后,再回到首页,点击右边的构建按钮,如果出现太阳了说明99%是成功了,如果出现错误可以根据控制台输出的信息查看错误原因,相信自己肯定能解决的。

想要深入了解jenkins加入jenkins讨论群是必须的,QQ搜索jenkins会有很多推荐的群,大家选择加入。

文章中如果有错误的地方也欢迎大家指正。

版权声明:本文为博主原创文章,未经博主允许不得转载。http://www.longdw.com/jenkinsgogsjavaweb/

Logo

一站式 AI 云服务平台

更多推荐