软件概要
Tomcat版本目录结构如下:
tree auto_deploy_app_to_tomcat/
auto_deploy_app_to_tomcat/
├── auto_deploy_app_remote.py
├── auto_deploy_app_v_final.py
├── auto_execute_mall.sh
├── auto_execute_mall_admin.sh
├── auto_execute_mall_api.sh
├── auto_scp_tomcat_log.sh
├── build.xml
├── config.conf
├── crontab
├── remote_restart.sh
├── remote_shutdown.sh
└── remote_startup.sh
0 directories, 12 files
该脚本实现的功能如下:
打印帮助
检出Mall Admin项目
检出Mall API项目
更新Mall Admin项目
更新Mall API项目
部署Mall Admin项目
部署Mall API项目
启动、关闭、重启Mall Admin项目
启动、关闭、重启Mall API项目
脚本帮助
./auto_deploy_app_remote.py -h
Auto deploy application to the remote web server. Write in Python.
Version 1.0. By Robin Wen. Email:dbarobinwen@gmail.com
Usage auto_deploy_app.py [-hciumakgstrwd]
[-h | --help] Prints this help and usage message
[-c | --svn-co-admin] Checkout the mall admin repo via svn
[-i | --svn-co-api] Checkout the mall api repo via svn
[-u | --svn-update-admin] Update the mall admin repo via svn
[-m | --svn-update-api] Update the mall api repo via svn
[-a | --shutdown-admin] Shutdown the mall admin via the remote_shutdown.sh scripts
[-k | --startup-admin] Startup the mall admin via the remote_startup.shscripts
[-g | --restart-admin] Restart the mall admin via the remote_restart.sh scripts
[-s | --shutdown-api] Shutdown the mall api via the remote_shutdown.sh scripts
[-t | --startup-api] Startup the mall api via the remote_startup.sh scripts
[-r | --restart-api] Restart the mall api via the remote_restart.sh scripts
[-w | --deploy-admin] Deploy mall admin via ant
[-d | --deploy-api] Deploy mall api via ant
在脚本名后加上「-h 或者 --help」表示打印帮助。
同理,加上「-c | -c | --svn-co-admin」表示检出Mall Admin项目,加上「-i | --svn-co-api」表示检出Mall API项目,加上「-u | --svn-update-admin」表示更新Mall Admin项目,加上「-m | --svn-update-api」表示更新Mall API项目,加上「-a | --shutdown-admin」表示关闭Mall Admin项目,加上「-k | --startup-admin」表示启动Mall Admin项目,加上「-g | --restart-admin」表示重启Mall Admin项目,加上「-s | --shutdown-api」表示关闭Mall API项目,加上「-t | --startup-api」表示启动Mall API项目,加上「-r | --restart-api」表示重启Mall API项目,加上「-w | --deploy-admin」表示部署Mall Admin项目,加上「-d | --deploy-api]」表示部署Mall API项目。
脚本概述
如前所述,「auto_deploy_app_remote.py」是主执行脚本,用于显示帮助以及调用相应函数。「auto_deploy_app_v_final.py」是核心执行脚本,实现所有的相关功能。核心执行脚本采用Fabric实现远程执行命令,主执行脚本再通过fab -f 脚本名 任务名调用相应方法。
主执行脚本和核心执行脚本的方法名基本一致,主执行脚本包括如下方法:main(argv)、usage()、svn_co_admin()、svn_co_api()、svn_update_admin()、svn_update_api()、shutdown_admin()、startup_admin()、restart_admin()、shutdown_api()、startup_api()、restart_api()、deploy_admin()和deploy_api()。
核心执行脚本包括如下方法:svn_co_admin()、svn_co_api()、svn_update_admin()、svn_update_api()、shutdown_admin()、startup_admin()、restart_admin()、shutdown_api()、startup_api()、restart_api()、deploy_admin()、deploy_api()和getConfig()。
主执行脚本:
main(argv) 主函数
usage() 使用说明函数
svn_co_admin 检出Mall Admin项目函数
svn_co_api 检出Mall API项目函数
svn_update_admin 更新Mall Admin项目函数
svn_update_api() 更新Mall API项目函数
shutdown_admin 关闭Mall Admin项目函数
startup_admin 启动Mall Admin项目函数
restart_admin 重启Mall Admin项目函数
shutdown_api 关闭Mall API项目函数
startup_api 启动Mall API 项目函数
restart_api 重启Mall API 项目函数
deploy_admin 部署Mall Admin项目函数
deploy_api 部署Mall API 项目函数
主执行脚本
主执行脚本内容如下:
参考脚本auto_deploy_app_remote.py。
核心执行脚本
方法和主执行脚本基本一致,相同的不赘述。核心执行脚本还提供getConfig()方法,用于读取配置文件。
核心执行脚本内容如下:
参考脚本auto_deploy_app_v_final.py。
auto_execute_mall.sh脚本实现了自动从SVN检出项目,自动部署到Tomcat。
参考auto_execute_mall.sh脚本。
auto_execute_mall_admin.sh脚本实现了自动从SVN检出Admin项目,自动部署到Tomcat。
参考auto_execute_mall_admin.sh脚本。
auto_execute_mall_api.sh脚本实现了自动从SVN检出API项目,自动部署到Tomcat。
参考auto_execute_mall_api.sh脚本。
auto_scp_tomcat_log.sh脚本实现了从Tomcat服务器自动拉取日志。为了更好的查看日志,拉取了近三天(昨天、今天和明天)的日志。
参考auto_scp_tomcat_log.sh脚本。
配置文件概述
完整配置文件内容如下:
# Remote server section.
[remote]
# Remote server ip.
remote_ip=
# Remote server port.
remote_port=
# Remote server username.
remote_usr=
# Remote server password.
remote_pwd=
# SVN path section.
[svn_path]
# Svn main directory of repo.
svn_sw_dir=
# Svn mall admin path.
svn_admin_path=
# Svn mall api path.
svn_api_path=
# Mall admin path.
admin_path=
# Mall api path.
api_path=
# Mall admin svn configuration section.
[svn_admin]
# Mall admin svn url.
svn_admin_url=
# Mall admin svn username.
svn_admin_username=
# Mall admin svn password.
svn_admin_password=
# Mall api svn configuration section.
[svn_api]
# Mall api svn url.
svn_api_url=
# Mall api svn username.
svn_api_username=
# Mall api svn password.
svn_api_password=
# Tomcat section.
[tomcat]
# Tomcat webapps path.
tomcat_path=
# Tomcat bin path.
tomcat_bin_path=
# Other configuration section.
[other]
# Remote log path.
remote_log_path=
接下来,我逐一进行讲解。
配置文件包括以下段:remote、svn_path、svn_admin、svn_api、tomcat和other。
每个段的说明如下:
remote 该段定义远程服务器登录信息。
remote_ip 部署远程服务器IP。
remote_port 部署远程服务器端口。
remote_usr 部署远程服务器用户名。
remote_pwd 部署远程服务器密码。
svn_path 该段定义SVN的相关路径。
svn_sw_dir 该段定义SVN的主目录。
svn_admin_path 该段定义Mall Admin SVN的主路径。
svn_api_path 该段定义Mall API SVN的主路径。
admin_path 该段定义Mall Admin SVN的具体路径。
api_path 该段定义Mall API SVN的具体路径。
svn_admin 该段定义Mall Admin的SVN相关信息。
svn_admin_url Mall Admin SVN的URL。
svn_admin_username Mall Admin SVN的URL。
svn_admin_password Mall Admin SVN的密码。
svn_api 该段定义Mall API的SVN相关信息。
svn_api_url Mall API SVN的URL。
svn_api_username Mall API SVN的URL。
svn_api_password Mall API SVN的密码。
tomcat 该段定义Tomcat相关信息。
tomcat_path Tomcat的webapps路径。
tomcat_bin_path Tomcat的启动脚本路径。
other 该段定义其他配置信息。
remote_log_path 远程服务器Log路径。
如有需要,请酌情修改。
脚本使用
Step 1: 运行脚本之前,需要把ant使用的build.xml分别放到~/build-xml/admin和~/build-xml/api中,方便程序读取。
注意:需要把YOUR_PROJECT改成您的项目名。
Step 2: 把Repo中以remote_开头的脚本放到Tomcat的bin目录。
Step 3: 把auto_deploy_app_v_final.py中的YOUR_PROJCET替换成您的项目名。命令如下:
sed -i 's/YOUR_PROJECT/XXX/g' auto_deploy_app_v_final.py
Step 4: 把以auto_开头的四个脚本以及config.conf配置文件放到远程服务器,脚本中的路径(YOUR_PATH)、Tomcat目录(YOUR_TOMCAT_HOME)、用户名(YOUR_NAME)、密码(YOUR_IP)请酌情修改,然后使用crontab中的任务自动执行。
crontab -e
crontab 任务如下。
crontab -l
00 00 * * * bash YOUR_PATH/auto_execute_mall.sh
0 01 * * * bash YOUR_PATH/auto_scp_tomcat_log.sh
*/1 * * * * ntpdate pool.ntp.org
该任务定义了凌晨0点部署项目,以及凌晨1点拷贝日志。
Step 5: 早晨上班就可以看到昨晚的部署日志了,如果有问题,把日志给开发人员,再做调试。So easy, 妈妈再也不用担心我加班了!:)