Powershell实践之Discuz!NT自动打包发布

缘起:以前写过一篇文章《Discuz!NT持续集成实战》介绍CruiseControl.net 来做Discuz!NT项目的持续集成 。最近喜欢上了 Powershell ,由于本人向来懒惰,遂将日常工作中一些琐碎的,重复的事情用 powershell 来做了。为此某不才,读了 PowerShell 自带的 《GettingStarted》和《UserGuide》 ,基本的东西也就差不多了。在实践的过程中也曾被一些小问题卡住,在ps自带的文档中没有发现解决办法。幸而得到高人相助,一句话道破天机。(悄悄说:这位高人最近酝酿一件关于ps的作品)

废话少说,上代码:

Code dnt_publish.ps1

#dnt_publish.ps1Createby戏水2008年12月23日13:05:22zjneter.cnblogs.com#环境变量Set-Location-pathE:\publish..\functions.ps1#引入外部文件,相当于include$Src=”E:\source\dnt\3″$SetupPublishTo=”E:\publish\pub_dnt26″$SourcePublishTo=”E:\publish\source\dnt26″$ZipSetupFileName=”.\dnt_26_n2.zip”$ZipSourceFileName=”.\dnt26_n2_src”$ExcludeFile=get-content-path.\ExcludeFile.txt$ExcludeDir=get-content-path.\ExcludeDir.txt$IsZipSetup=Read-Host(“是否生成安装包?[y\n]”)$IsZipSource=Read-Host(“是否生成源码包?[y\n]”)$IsUploadSetupToDntWebServer=Read-Host(“是否上传安装包到nt官方?[y\n]”)$IsUploadSetupToDownloadServer=Read-Host(“是否上传安装包到下载服务器?[y\n]”)$IsUploadSourceToDownloadServer=Read-Host(“是否上传源码包到下载服务器?[y\n]”)#SVN更新svnup$Src#编译解决方案C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe$Src\Discuz_vs08.sln/t:Build/v:m/fileLoggerParameters:LogFile=MyLog.log;#生成模板#处理安装包if($IsZipSetup-eq”y”)#如果变量IsZipSetup==”y”{#复制及清理文件robocopy$Src\Discuz.Web$SetupPublishTo\upload_files/E/XF$ExcludeFile/XD$ExcludeDir/MIR.\clear.bat#在这个bat中进行了一些清理文件的操作#开始压缩wzzip$ZipSetupFileName$SetupPublishTo-r-p#调用winzip的命令行生成压缩包,参数说明请google}#处理源代码包,ExportDNTSource是戏水自己写的functionif($IsZipSource-eq”y”){ExportDNTSource’https://svn.bugaosuni.com/dnt’E:\publish\source\dnt26wzzip$ZipSourceFileName$SourcePublishTo-r-p}#是否发布到nt.discuz.netif($IsUploadSetupToDntWebServer-eq”y”){#Write-Host”UploadSetupToDntWebServer$IsUploadSetupToDntWebServer”UploadSetupToDntWebServer}#是否发布到download.comsenz.comif($IsUploadSetupToDownloadServer-eq”y”){#Write-Host”UploadSetupToDownloadServer$IsUploadSetupToDownloadServer”UploadToDownloadServer$ZipSetupFileName”2.6″}if($IsUploadSourceToDownloadServer-eq”y”){UploadToDownloadServer$ZipSourceFileName”src”}

下面是一些功能函数 :

Codefunction.ps1#function.ps1Createby戏水2008年12月23日13:16:43zjneter.cnblogs.com#上传ftpfunctionglobal:Upload{#param定义函数接受的参数,可以指定默认值param([string]$h,[string]$u,[string]$p,[string]$f,[string]$cd=”\”)$cmd=”open$huser$u$pbinarycd$cdput$f”$cmd|ftp-n}functionUploadSetupToDntWebServer{Write-Host-foregroundcolorgreen”开始ftp上传到官方网站”Upload-h221.194.139.228-unicai-p!@#$%^&*()-f$ZipSetupFileNameif($?){Write-Host-foregroundcolorgreen”上传到官方网站成功!”}else{Write-Host-foregroundcolorred”上传到官方网站失败!”}#$?变量表示最后一个操作成功与否,成功返回true}functionUploadToDownloadServer{param([string]$filename,[string]$cd)Write-Host-foregroundcolorgreen”开始ftp上传到下载服务器”Upload-hdownload.comsenz.com-unizaicai-p!@#$%^&*()-f$filename-cd$cdif($?){Write-Host-foregroundcolorgreen”上传到下载服务器成功!”}else{Write-Host-foregroundcolorred”上传到下载服务器失败!”}}functionExportDNTSource{param([string]$url,[string]$path)Remove-Item$path-force-recursesvnexport$url$path从svn中导出无版本控制的源代码if($?){Write-Host-foregroundcolorgreen”导出源代码成功!”}else{Write-Host-foregroundcolorred”导出源代码失败!”}}

这里需要注意的是 dnt_publish.ps1文件中 引入 function.ps1文件的方法:文件名前用了两个点,而且两个点中间需要有空格。

闲言碎语:不才初步体验了PowerShell 一下,感觉很不错哦,像粘合剂一样 把一些小工具 ,WMI .Net Framework 等联系起来 组成超级强大的武器。 语法么还是稍稍感觉有些怪,不太舒服,不过习惯就好了。 另外如果VS能支持 PowerShell 就好了,感觉 PowerShellPlus 用起来还是稍稍不爽。自从写了这个脚本,一切只需轻轻的点一下鼠标,真个过程就自动ok了 (过程: svn check out -> MSBuild 编译解决方案 -> 上传到FTP服务器) 。当然 结合前天代震军同学翻译的文章

http://www.cnblogs.com/daizhj/archive/2008/12/22/1352019.html ,就可以实现整个的打包发布流程咯。

行文仓促,如有谬误 ,还请指正

编辑器不好用,上面的代码可能有问题, 提供源代码下载:http://files.cnblogs.com/zjneter/dnt_publish.rar

而更像是听见了天地间冥冥中的呼唤,

Powershell实践之Discuz!NT自动打包发布

相关文章:

你感兴趣的文章:

标签云: