软件概要

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, 妈妈再也不用担心我加班了!:)