Jenkins使用shell脚本部署到远程服务器步骤

在使用Jenkins进行持续集成时发现,并不是所有的项目直接放在tomcat的webapps下部署运行的,本文主要讲述Jenkins如何使用shell脚本部署部署到远程服务器的方法


此处以Linux+tomcat为例

准备工作:

1>完成Jenkins服务环境的搭建,此处不再详述,不会的童鞋可参考下面的博客

http://www.cnblogs.com/zz0412/tag/jenkins/

2>安装Publish Over SSH插件(这个插件可以通过ssh连接其他Linux机器),不会的童鞋可参考:

http://www.cnblogs.com/zz0412/p/jenkins_jj_10.html

3>配置SSH Server

Jenkins使用shell脚本部署到远程服务器步骤_第1张图片

然后新建jobs,在SSH server页面进行一下配置

Jenkins使用shell脚本部署到远程服务器步骤_第2张图片

说明:以上配置是在构建项目时将jenkins服务器上生成的项目war包拷贝到远程服务器下

(注意要记得为文件配置权限,我在此处有一个删除脚本的命令,大家根据需要,不一定需要此步骤)

#########################shell脚本内容分享########################

图中脚本jenkins_reboot.sh主要功能为部署项目war包至tomcat服务器中,重新启动tomcat,包括重命名、删除、备份等步骤,code如下:

Jenkins使用shell脚本部署到远程服务器步骤_第3张图片

Jenkins使用shell脚本部署到远程服务器步骤_第4张图片

不太熟悉的同学可以做个参考,但切不可直接套用

###########################脚本结束##############################

启用步骤:

构建后操作→Add post-build action→Send build artifacts over SSH

SSH  Server Name:选个一个你在系统设置里配置的配置的名字

Transfer Set Source files:需要上传的文件(注意:相对于工作区的路径。看后面的配置可以填写多个,默认用,分隔)

注意:这个是相对于Jenkins服务的工作区而言的相对路径,例如:我自己的Jenkins的主目录设置为 /apps/Jenkins_home(Jenkins服务器)

我创建的该工程的工作区的目录绝对路径是 /apps/Jenkins_home/jobs/gulu-admin_test/workspace(Jenkins服务器) 

那我Source files中的 target/*.war 的绝对路径就是 /apps/Jenkins_home/jobs/gulu-admin_test/workspace/target/*.war


Remove prefix:移除目录(只能指定Transfer Set Source files中的目录)

注:如果该处不填,则构建后的war包相对于远程目录Remote directory的相对路径为 target/*.war (实际上*为maven构建的war包名称)

如果此处填了,比如我填了target,那么构建后的war包相对于远程目录Remote directory的相对路径为 *.war (实际上*为maven构建的war包名称)


Remote directory:远程目录(根据你的需求填写吧,因为我这儿是测试,所以偷懒没有填写。默认会继承系统配置)

说明:如果不填写,则将Jenkins服务器打的war包拷贝到远程默认的Remote directory目录(系统设置中的Remote directory,如我途中设置的为 /apps 目录

如果填写,比如我填写的为jenkins_war,则将Jenkins服务器打的war包拷贝到远程的Remote directory目录下的jenkins_war 目录下,即该路径是相对于系统配置的远程Remote directory目录的相对路径


Exec command:把你要执行的命令写在里面


(新版本的要求Transfer Set Source files和Exec command都要填写,可以不了他。老版本的允许只填写一个)

高级:


################分割线,一下设置本人未进行操作#####################

Exclude files:排除的文件(在你传输目录的时候很有用,使用通配符,例如:**/*.log,**/*.tmp,.git/)

Pattern separator:分隔符(配置Transfer Set Source files的分隔符。如果你这儿更改了,上面的内容也需要更改)

No default excludes:禁止默认的排除规则(具体的自己看帮助)

Make empty dirs:此选项会更改插件的默认行为。默认行为是匹配该文件是否存在,如果存在则创建目录存放。选中此选项会直接创建一个目录存放文件,即使是空目录。(个人理解)

Flatten files:只上传文件,不创建目录(除了远程目录)

Remote directory is a date format:远程目录建立带日期的文件夹(需要在Remote directory中配置日期格式),具体格式参考下表:

Remote directory Directories created
'qa-approved/'yyyyMMddHHmmss qa-approved/20101107154555
'builds/'yyyy/MM/dd/'build-${BUILD_NUMBER}' builds/2010/11/07/build-456 (if the build was number 456)
yyyy_MM/'build'-EEE-d-HHmmss 2010_11/build-Sun-7-154555
yyyy-MM-dd_HH-mm-ss 2010-11-07_15-45-55

Exec timeout (ms):运行脚步的超时时间(毫秒)

Exec in pty:模拟一个终端执行脚步

Add Transfer Set:增加一个配置

##################################################

出了以上,我还进行了以下配置

Jenkins使用shell脚本部署到远程服务器步骤_第5张图片

以上配置主要为了运行jenkins_reboot.sh这个shell脚本,实际应用中此步骤可以省略

(我这么做是由于jenkins管理的项目众多,为了方便统一管理shell脚本,我将不同的shell脚本放在了一个服务器上,同学们可以直接将shell脚本上传至远程的那台服务器上,在上面的Exec command中写上执行命令即可,不需要在另外配置一个SSH server


所有配置均正确配置完成后,构建该项目即可看到项目build success --》连接到远程服务器 --》运行shell脚本 --》更新war包并重启tomcat服务,即构建成功


主要补充:我在构建项目后查看控制台输出日志,出现下列问题

Jenkins使用shell脚本部署到远程服务器步骤_第6张图片

以上情况曾让我错以为无法连接到远程,实际上已经连接成功,同学们可到远程目录Remote directory下查看是否有变化,我当时被这个问题困扰了很久,因为我一直以为无法连接到远程主机,后来查看后发现实际上是连接成功的


以上为自己在实际操作中的一些经验总结,希望给同学们一个参考,jenkins在使用的时候尽量多尝试,慢慢就会有经验了

你可能感兴趣的:(Jenkins)