与构建系统整合的服务器部署程序的用法 - 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秒之后超时。 一般用不到。