发布脚本使用
功能
- 打包部署应用
- 启动应用
- 关闭应用
- 重启应用
- 回滚到之前的某一版本
- 上述操作均支持多应用并发执行
命令行语法
usage: main.py [-h] [--tag TAG] --action {update,rollback,start,stop,restart}
--apps APPS [--exclude_apps EXCLUDE_APPS] [--config CONFIG]
optional arguments:
-h, --help show this help message and exit
--tag TAG git的tag号
--action {update,rollback,start,stop,restart}
发布动作
--apps APPS 要发布的应用名称,
应用之间使用英文的逗号分隔
--exclude_apps EXCLUDE_APPS
不要发布的应用名称,
应用之间使用英文的逗号分隔
--config CONFIG 配置文件名称
用例
使用本地代码打包部署所有应用到op环境
- 切换到发布脚本目录:cd ~/cana/script/deployer/new_deployer/src
- python main.py --config test.cfg --action=update --apps all
使用本地代码打包部署所有应用到op环境,除了bankgate-server
- 切换到发布脚本目录:cd ~/cana/script/deployer/new_deployer/src
- python main.py --config test.cfg --action=update --apps all --exclude_apps bankgate-server
使用本地代码打包部署指定应用到op环境
- 切换到发布脚本目录:cd ~/cana/script/deployer/new_deployer/src
- python main.py --config test.cfg --action=update --apps member-server,account-server
重启op环境上的所有应用
- 切换到发布脚本目录:cd ~/cana/script/deployer/new_deployer/src
- python main.py --config test.cfg --action=restart --apps all
(一般在生产环境使用)回滚指定应用到某一版本
- 切换到发布脚本目录:cd ~/cana/script/deployer/new_deployer/src
- python main.py --config prod.cfg --tag=R_1.0.0 --action=rollback --apps member-server
指定要发布应用的主机
有的时候只需要发布某个主机上的应用,不需要发布所有主机,可以通过 --apps appName:host1 来实现。
例子:
- 重启101上的vbam-front-biz
python main.py --action restart --apps vbam-front-biz:192.168.192.101 --config prod.cfg --tag any - 重启101和106上的vbam-front-biz。101和106之间使用下划线分隔。
python main.py --action restart --apps vbam-front-biz:192.168.192.101_192.168.192.106 --config prod.cfg --tag any
不支持的组合
(1) 不支持all+ip : --apps all:192.168.192.101
(2) apps参数指定主机后, exclude_apps 参数失效
- 重启101上的vbam-front-biz
如何配置新的应用
系统新增应用后,我们需要在config文件中做下配置,以member-server为例, 在test.cfg中增加如下块
[app:member-server]
# 打包命令
gradle_package_task = member:member-server:distZip
# 打包生成的文件路径,这是个相对路径, 相对于本地代码库根目录(我的电脑上是~/cana)
gradle_package_dest = member/member-server/target/distributions/member-server.zip
# 要发布到哪台主机
ip=192.168.1.7
# 发布文件通过scp命令传到服务器上的/tmp目录后,再执行下面命令拷贝到真正的执行路径
remote_deploy_command = cp /tmp/{package_name} /data/apps/member/member-server
# 启动命令
start_command = rm -rf /data/apps/member/member-server/{package_name_no_suffix};cd /data/apps/member/member-server && unzip {package_name} && cd {package_name_no_suffix} && nohup /bin/bash bin/member-server >nohup.out 2>&1 &
# 预计的启动时间,指定的时间过了之后,才会验证进程是否启动
start_timeout = 10
# 获取进程pid的命令。 关闭时,可以通过这个命令获取到pid,再通过kill -9强杀。执行启动后,可以执行这个命令,验证进程是否启动
get_pid_command = ps aux | grep /data/apps/member/member-server/member-server/lib | grep -v grep | awk {{'print $2'}}
# 部署时,将当前版本备份到{app_backup}目录
backup_command = mkdir -p {app_backup} && cp /tmp/{package_name} {app_backup}/{package_name}-{tag}
# 回滚时,从{app_backup}目录中选择指定版本的文件复制奥执行路径
restore_command = cp {app_backup}/{package_name}-{tag} /data/apps/member/member-server/{package_name}