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

本文介绍了一个使用 PowerShell 脚本自动完成 Discuz!NT 项目的 SVN 更新、编译、打包及 FTP 上传的过程。通过简单的交互式提问,脚本实现了安装包与源码包的灵活生成,并能够自动上传至官方网站与下载服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

废话少说,上代码:

ContractedBlock.gifCode dnt_publish.ps1

ExpandedBlockStart.gif
#dnt_publish.ps1  Create by 戏水 2008年12月23日13:05:22   zjneter.cnblogs.com
#
环境变量
    Set-Location -path E:\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更新
    svn up $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 //XF $ExcludeFile /XD $ExcludeDir /MIR
        
        .\clear.bat   
#在这个bat中进行了一些清理文件的操作
        #开始压缩
        wzzip $ZipSetupFileName $SetupPublishTo --#调用winzip的命令行 生成压缩包,参数说明请google
    }
    
    
#处理源代码包 ,ExportDNTSource 是戏水自己写的function
    if ($IsZipSource -eq "y")
    {
        ExportDNTSource 'https:
//svn.bugaosuni.com/dnt' E:\publish\source\dnt26
        wzzip 
$ZipSourceFileName $SourcePublishTo --p
    }
    
    
#是否发布到nt.discuz.net
    if ($IsUploadSetupToDntWebServer -eq "y")
    {
        
#Write-Host "UploadSetupToDntWebServer   $IsUploadSetupToDntWebServer"
        UploadSetupToDntWebServer
    }
    
#是否发布到download.comsenz.com
    if ($IsUploadSetupToDownloadServer -eq "y")
    {
        
#Write-Host "UploadSetupToDownloadServer   $IsUploadSetupToDownloadServer"
        UploadToDownloadServer $ZipSetupFileName "2.6"
    }
    
    
if ($IsUploadSourceToDownloadServer -eq "y")
    {
        UploadToDownloadServer 
$ZipSourceFileName "src"
    }



下面是一些功能函数 :

ContractedBlock.gif Code function.ps1
#function.ps1 Create by 戏 水  2008年12月23日 13:16:43 zjneter.cnblogs.com
#
上传ftp
function global:Upload
 {
        
#param定义函数接受的参数,可以指定默认值
    param([string]$h, [string]$u, [string]$p,[string]$f,[string]$cd="\")

    
$cmd = "open $h
     user $u $p
    binary
    cd $cd
    put $f
"
     
$cmd | ftp -n
}


function UploadSetupToDntWebServer
 {
    Write
-Host -foregroundcolor green "开始ftp上传到官方网站"
    Upload 
-221.194.139.228 -u nicai -!@#$%^&*() -f $ZipSetupFileName
    if ($?
    {
        Write
-Host -foregroundcolor green "上传到官方网站成功!"
    }
    
else
    {
        Write
-Host -foregroundcolor red "上传到官方网站失败!"
    }
        
#$?变量表示最后一个操作成功与否,成功返回true
}


function UploadToDownloadServer
 { 
     
param([string]$filename,[string]$cd)
    Write
-Host -foregroundcolor green "开始ftp上传到下载服务器"
    Upload 
-h download.comsenz.com -u nizaicai -!@#$%^&*() -f $filename  -cd $cd
    if ($?
    {
        Write
-Host -foregroundcolor green "上传到下载服务器成功!"
    }
    
else
    {
        Write
-Host -foregroundcolor red "上传到下载服务器失败!"
    }
}

function ExportDNTSource
{
    
param([string]$url,[string]$path)
    Remove
-Item $path -force -recurse
    svn export 
$url $path  从svn中导出无版本控制的源代码
    
if ($?
    {
        Write
-Host -foregroundcolor green "导出源代码成功!"
    }
    
else
    {
        Write
-Host -foregroundcolor red "导出源代码失败!"
    }
}


这里需要注意的是 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值