与构建系统整合的服务器部署程序的用法 - housekeeper-software/soft GitHub Wiki

简介

此工具(appdeploy)可以与构建系统如jenkins整合使用,在构建之后直接部署到远端服务器。
可以支持SSL传输和非SSL传输。如果指定证书位置即可使用SSL传输。

原理

此工具可以作为服务器端和客户端使用,根据不同的命令行参数而已。服务器端和客户端之间建立websocket连接,用于传输文件和交换数据。
此工具支持自签名证书对通讯进行加密。只要确保证书不被泄漏,即可保证服务器的安全性。
此工具可以运行于linux和windows平台。

作为服务器端的命令行参数

作为服务器端是需要持久运行,因而可以加入启动脚本中,并且确保其在异常退出之后能够自动启动。

用法举例:   
./appdeploy --listen=9090 --certdir=/usr/local/cert  
--listen:表示服务器端侦听在哪个端口  
--certdir:指定服务器证书的所在位置。  
证书名称必须为:   
ca证书: ca.cert.pem  
服务器证书: server.cert.pem  
服务器key证书: server.key.pem  

作为客户端的命令行参数

作为客户端执行,与指定的服务器端建立websocket连接,任务完成之后,程序即可退出。服务器为每个客户端连接开启新的线程,因而支持并行任务。

向服务器上传文件(upload)

./appdeploy --host=xxx.xx.xx.xx:9090 --certdir=/usr/local/client/cert --wait=true --stdout=true --cmd=upload --source=d:\a --target=/tmp/a  
--host:指定服务器地址和端口  
--certdir:指定客户端证书位置  
客户端证书包含:  
ca证书: ca.cert.pem  
客户端证书:client.cert.pem  
客户端key证书: client.key.pem  
--wait:表示等待任务完成  
--stdout:表示需要服务器返回执行输出  
--cmd:表示执行的命令  
--source:源文件  
--target:目标文件  

需要服务器执行程序或者脚本(shell)

./appdeploy --host=xx --certdir=xx --wait=true --stdout=true --cmd=shell --target="/tmp/update/update.sh" --dir=/tmp/update  
--cmd=shell,表示执行远程服务器的程序或脚本   
具体的程序由 --target指定。  
--dir:表示执行之前,将当前目录切换到--dir指定的位置。  
--stdout:执行程序或者脚本的控制台输出会传回客户端,调用者可以捕获控制台输出。  

需要服务器执行某个shell命令(popen)

..appdeploy --host=xx --certdir=xx --wait=true --stdout=true --cmd=popen --target="cd /home/xx/workspace && ls -l"  
显然这是调用Linux系统的popen命令执行的,可以执行复杂的shell命令。   
popen输出实时的传回给客户端。下面是个具体的例子:   

F:\dev\housekeeper\hw\trunk\project\jingxi\server\build\x64\Debug>appdeploy.exe --host=119.3.5.12:9090 --cmd=popen --wait-true --stdout=true --target="ls -l" --certdir=F:\dev\housekeeper\hw\trunk\project\jingxi\server\build\x64\Debug
total 96624
-rwxr-xr-x 1 root root 30507568 May 11 09:22 appdeploy
-rw-r--r-- 1 root root 30366024 May 11 09:22 faceserver
-rwxr-xr-x 1 root root      892 May 11 09:22 intercom.sh
-rw-r--r-- 1 root root 38056904 May 11 09:22 transit
TASK COMPLETED:
result:0
exit code:[0]
message:[shell exec completed]  

需要特别注意,popen的命令不能用于 nohup之类的命令,否则nohup启动的程序会输出到appdeploy,一般,作为后台运行的程序永不退出,此刻appdeploy也不会退出。  
nohup只能用 --cmd=shell来执行,且不能设置 --stdout=true。  

超时

客户端执行可以指定 --timeout=60,表示任务在60秒之后超时。 一般用不到。