E项目终于在年初出街了,进入维护期,由于deployment team人手短缺,被调去做parttime了。
一直都知道deployment不是一个好差事,千躲万躲都还是没躲掉,唉,既来之则安之吧。
E项目分了DEV, SIT, UAT, PRE-PRODUCTION, PRODUCTION数个环境,各自有WAS, WPS, DB, COGNOS, EFORM数台服务器,单是理清这一堆东西就已经甚是复杂了。而我们的部署策略是:DEV, SIT, UAT, PRE-PRODUCTION 是 daily, PRODUCTION受CCC控制,定期发布版本。最要命的是,deployment一定是非办公时间做,任务那是相当的繁重,因此,如何减轻工作量,减少其中的人为疏忽是首当其冲的任务。
首先需要解决的是各个不同环境的配置问题。
这个前人已经搞好了,在workspace中针对不同的环境,在相应的文件夹下准备好不同配置文件。例如:
|-Web
| |-config.xml
|
|-Deployment
|-DEV
| |-Web
| |-config.xml
|-UAT
|-Web
|-config.xml
利用RSD导出部署用ear, war文件后,编写一个批处理命令解开包,然后用不同环境里面的配置文件覆盖掉,再重新打包。这样,针对不同环境的部署包只需要制定不同的文件目录就可以了。
接下来就是把准备好的包upload到不同的环境中部署了,我们考虑的只有一个:自动化!
以前使用WAS的admin console需要stepbystep的去做,太麻烦了,利用jacl文件就简单多了:stop_app.jacl, uninstall_app.jacl, install_app.jacl, start_app.jacl四个命令就一气呵成了(参考http://www.ibm.com/developerworks/websphere/library/samples/SampleScripts.html)。
WPS的部署也可以通过配置几个xml搞定(参考http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0303_buczak/buczak.html)。
接下来把这几个动作都串起来:用pscp命令上载包,用plink命令调部署script,再用clearcase的命令(见最后)做一个baseline,一个命令就能搞定daily deployment啦!
PRODUCTION的deployment就没这么轻松了,客户的PRODUCTION环境受严格控制的,顺便也吹一吹我们的流程吧:
12:00 Cutcode from UAT, deploy to PRE_PRODUCTION to verify, 俗称“过冷河”
16:00 Prepare packages.
18:00 Data path, deploy Cognos reports, eForm templates
19:30 Call TSS 开始部署WAS(三个集群)
21:30 call TSS 开始部署WPS(四个集群)
24:00 要是还没做完,或者出错的话,TSS就会还原部署前备份。
Clearcase make baseline command:
@echo OFF
setlocal
set defaultViewName=XXXXX
set timestampStart=%date:~6,4%%date:~0,2%%date:~3,2%_%time:~0,2%%time:~3,2%
set defaultBaselineName=XXXXX_%timestampStart%
if "%1"=="" set viewName=%defaultViewName%
if not "%1"=="" set viewName=%1
shift
if "%1"=="" set baselineName=%defaultBaselineName%
if not "%1"=="" set baselineName=%1_%timestampStart%
echo =============================================
echo ViewTag=%viewName%
echo BaselineName=%baselineName%
echo start creating baseline at %timestampStart%
echo =============================================
if "%viewName%"=="" echo Fatal Error: viewName is mandatory!
if "%viewName%"=="" goto endAnchor
if "%baselineName%"=="" echo Fatal Error: baselineName is mandatory!
if "%baselineName%"=="" goto endAnchor
cleartool mkbl -nc -incremental -view %viewName% %baselineName%
:endAnchor
set timestampEnd=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%
echo =============================================
echo update mainstream at %timestampStart% (start)
echo update mainstream at %timestampEnd% (end)
echo =============================================