jenkins 远程发布脚本方法,jenkins发布脚本
jenkins 远程发布脚本方法,jenkins发布脚本
jenkins 远程发布脚本方法。jenkins 本地发布脚本中,通过cp命令将编译好的jar移动到同一个服务器中的另外发布目录,然后发布。正常情况肯定不会是这样的,他应该是其他服务器上指定的位置,并且服务器的数量可能还不止一个。
将一个文件从一个服务器移动到另一个服务器使用的是scp命令。但是使用shell脚本调用scp时会面临一个问题,即scp强制要求通过交互方式输入密码,而不像mysql等拥有-u -p选项。为了达成自动化部署,我们要借用expect脚本。
expect安装
cenos执行 yum install expect -y 命令安装脚本,因为其依赖了tcl,所以,也会跟着把tcl一起安装了。
Expect中最关键的四个命令是send、expect、spawn、interact。
send:用于向进程发送字符串 expect:从进程接收字符串 spawn:启动新的进程 interact:允许用户交互服务器间文件传输
首先来做一个小实验,需求是将文件重A服务器传输到B服务器。这里利用Expect来实现两台服务器间的文件传输。
在A服务器指定目录/home/pec/tmp下新建一个tranport.sh
cd /home/pec/tmp //切换到指定目录 touch tranport.sh //创建文件 vi tranport.sh //编辑
在tranport.sh添加以下内容:
#!/usr/bin/expect spawn scp -P 22 /var/lib/jenkins/workspace/demo-test/target/demo-test-0.0.1-SNAPSHOT.jar root@192.168.56.103:/home/pec/www expect "*assword" {set timeout 300; send "123456\r";} expect "*#" interact
说明:
1. /var/lib/jenkins/workspace/demo-test/target/demo-test-0.0.1-SNAPSHOT.jar 表示的是A服务器的文件路径,
2. root@192.168.56.103:/home/pec/www 表示 【B远程主机的用户名@B远程主机的ip地址:B远程主机上接收文件的目录】
3. 123456 表示 B远程主机的密码
最后一步就是执行tranport.sh文件了,注意执行之前,要给tranport.sh可执行的权限,不然是无法执行的。
chmod +x startup.sh //赋予文件可以行的权限 ./startup.sh //执行文件
按照提示,就可以将文件从一台服务器,传输到另一台服务器了。读者可以在B的服务器目录查看下。
远程发布脚本
需求和上述情况基本是一样的,利用jenkins将服务器A编译打包好的jar包,远程传送到B服务器,并让其在B服务器上运行起来。
把工作区分,A服务器上的jinkens负责编译打包并执行B服务器上的发布脚本。B服务器则准备好发布位置和发布脚本,供服务器A调用。当然这里B服务器得有Java运行环境才行。
B服务器先做好准备:
发布目录:/home/pec/www 发布脚本:startup.sh 存储pid的文件:demo-test.pid以上名字都随便取,只要后缀一样,并且使用时别用错就行。
mkdir /home/pec/www //新建目录 cd /home/pec/www //切换至目录下 touch demo-test.pid //新建存储pid的文件 touch startup.sh //新建脚本文件startup.sh chmod +x startup.sh //给脚本startup.sh赋予可执行的权限 vi startup.sh //编辑
在startup.sh文件中添加以下代码:
#!/bin/bash www_path=/home/pec/www jar_name=demo-test-0.0.1-SNAPSHOT.jar pid=$(cat /home/pec/www/demo-test.pid) if ${pid}; then echo "pid is null" else kill -9 ${pid} fi cd ${www_path} java -jar ${jar_name} & echo $! > /home/pec/www/demo-test.pid
OK,B服务器得准备工作就都完成了。
A服务器上要做的事情:
其他的就不看了,直接给脚本吧,在jenkins任务中配置Post Steps,其脚本如下:
#!/bin/bash export BUILD_ID=dontKillMe www_path=/home/pec/www jar_path=/var/lib/jenkins/workspace/demo-test/target jar_name=demo-test-0.0.1-SNAPSHOT.jar expect -c " spawn scp -P 22 ${jar_path}/${jar_name} root@192.168.56.103:${www_path} expect \"*assword\" {set timeout 300; send \"123456\r\";} expect \"yes/no\" {send \"yes\r\"; exp_continue;} " expect -c " spawn ssh root@192.168.56.103 expect { \"*assword\" {set timeout 300; send \"123456\r\";} \"yes/no\" {send \"yes\r\";exp_continue} } expect \"*#\" send \"cd /home/pec/www\r\" expect \"*#\" send \"sh startup.sh\r\" expect \"*#\" send \"exit\" "
保存后立即构建即可完成服务的远程发布。这里没有具体些jenkins的配置和其他东西,那些如JDK、mvaen、git等配置,请读者自行Google。
评论暂时关闭