现在,偶维护的控件,每发布一次,需要做不少工作。手脚麻利,脑袋清醒,一次
需要差不多30分钟,但仔细想来,几乎没做什么有意义的事情:
假定代码已经调试完毕,准备发版,简单罗列一下需要做的事儿:
1:签出相关的发布文件。因为牵扯多个版本,所以有好几个不同的文件。
2:编译源码:
首先呢,需要升级控件编本号(通过修改rc文件和odl文件)。
由于控件根据不同的编译开关,需要生成多个版本,所以,需要编译多次,每编译
完成一次,再在IDE中切换当前编译项目,开始重编,编译下一个。
3:注册各个控件,用不同的测试用例进行简单测试。
现在的测试呢,主要是保证可以注册,可以通过简单示例。
4:拷贝编译生成的相关文件到发布目录。
5:签入相关的发布文件。
6:写发布日志。
7:发送邮件通过发版。
明白了吧,这些全是很无聊的事情。
要不是在傻傻的等机器干完活(编译,切换),要不就是在机械的点鼠标,拷个文件,
写固定格式的邮件,没一点技术含量。唉,这哪是俺们高智商的脑力劳动者该做的事儿呢,
再说了,一不小心,手抽个筋,小脑袋开个小差,可能就忘了改版本,忘了写日志哈的,搞错
了,是要挨批地,嘿,你说是不是。
在控件的测试和集成期,改动多,每天都有约两次的发布,准确性很重要。
其实呢,一早就知道上述过程可以自动化,但总是懒得去做,今天开个头。
下面,我依次列出实现方法,
1:签出/签入文件,以VSS为例,完全可以用VSS的命令行来完成。
如:
登录VSS并定位工程:
set SSDIR=//192.168.16.5/easctrl_work
ss CP $/OCX/v10.21/V10_Release -Ystone,12345
签出/签入:
ss checkout -I- -GLE:/work/ocx/v10.21/V10_Release xxxxu.ocx
ss checkin -I- -GLE:/work/ocx/v10.21/V10_Release xxxx.ocx
2:自动编译。
2.1:首先,对于不同版本,大多可以在编译设置中用预编译宏开关来设置。
要简单生成新的编译项目,可以在IDE中简单建立,然后用文本编辑器打开dsp文件,进行相同
部分拷贝,再回到IDE进行不同处的设置。
注意:在MFC的控件项目中,源码,资源,odl各自都有其不同的预编译开关设置处。
2.2:通过VC的IDE导出mak文件,当然不用自已去手写啦,如果你够强,直接改mak,去掉一些不
必要的步骤。注意:如果你对mak文件很熟,那无颖你的编译自动化会进行得更加完善,你可以动态
添加或删除修改一些开关,以更灵活的生成多个版本的发行文件,而不依赖于烦琐的IDE界面。
2.3:用NMAKE命令进行编译:
如:
NMAKE /a /f "xxxx.mak" CFG="xxxx - Win32 Release"
NMAKE /a /f "xxxxu.mak" CFG="xxxxu - Win32 Unicode Release"
/a:表示强制重编 CFG指:编译的项目
3:版本号自增:
这个呢,可以通过VC插件方式实现:我就不详述了,可参见MSDN:
http://support.microsoft.com/default.aspx?scid=kb;en-us;237870
4:用例测试:
这个得自已写测试程序,将命令加到批处理中即可。
注意,用例要有约定好的返回值,以便批处理判定测试是否成功。
5:发布日志:
这个得看你的日志记录方式,相信,一点都不难。如果是用文本,那就写文本好了。
6:自动发邮件:
嗯,我再偷偷懒,你自已去查Outlook的相应的命令行,或者利用它的宏(后面有样例)。
7:用DOS的bat文件实现批处理。
相关命令可以查操作系统的帮助。特别注意使用 if,goto,%n等控件批处理流程和输入的命令。
8:用VC的mak工程来整合自动化发布。
新建一个makfile工程,让它运行我们实现的批处理即可。
可以将这个mak工程加入到你的工程组中,这样,需要发布时,只要选择该工程的Build即可自动进行了。
当然,也可以直接运行批处理命令来执行发布。
嗯,差不多就这些了。
再补充几点我的体会:
1:.Net和Java中企业应用的大规模部署,引入了Ant之类的自动发布辅助工具,看似挺新鲜,实际上呢,对于
Windows编程,基本所有IDE工具都提供了Shell,如果我们能掌握各种IDE中被我们忽视的shell命令,很多工作
都是可以自动化的,这不是自动化编程,因为根本没有在编程,只不过是懒人的一种工作方式。
2:在VB中有提供自动编译的组件,可以同样完成自动编译工作。
可参见:http://dev.youkuaiyun.com/develop/article/18/18746.shtm
3:我已实现了一个bat,确实给我带来好处,我想我会继续尝试,做一个真正的懒人。
附A:自动发送邮件的VBA示例。
Sub sendReleaseMail()
'要能正确发送并需要对Microseft Outlook进行有效配置
On Error Resume Next
Dim objOutlook As New Outlook.Application
Dim objMail As MailItem
'创建objOutlook为Outlook应用程序对象
Set objOutlook = New Outlook.Application
'开始发送电子邮件
'创建objMail为一个邮件对象
Set objMail = objOutlook.CreateItem(olMailItem)
With objMail
'设置收件人地址(从通讯录表的“E-mail地址”字段中获得)
.To = "stone_zheng@kdsv.kingdee.com"
'设置邮件主题
.Subject = "控件发版测试"
'设置邮件内容(从通讯录表的“内容”字段中获得)
.Body = "测试的邮件内容"
'设置附件(从通讯录表的“附件”字段中获得)
'.Attachments.Add Cells(rowCount, 4)
'自动发送邮件
.Send
End With
'销毁objMail对象
Set objMail = Nothing
'销毁objOutlook对象
Set objOutlook = Nothing
'电子邮件发送完成时提示
MsgBox "发送成功"
End Sub