har*_*don 1 tfs team-build visual-studio-2010 tfs2010 microsoft-web-deploy
我已经掌握了Ajax minifier,以便将一些JS和CSS文件缩小为构建/打包/部署过程的一部分.它是一个很棒的工具,完全符合我们的需要.但是,将其集成到我们的构建/部署过程中非常困难.
理想情况下,我们只有在执行TFS 2010构建之一(即在开发机器上不是本地(Ctrl + Shift + B jobbie)构建)时才运行此工具.此外,我们希望将此方案中当前的"非缩小"文件替换为缩小的文件(即,在相同的文件名下),而不是加载名为".min.js"等的其他文件.
经过大量阅读后,我认为关键是工作流程中的自定义构建任务 - 但我不知道如何处理这个问题 - 特别是因为我希望缩小将直接从我们的版本中删除的文件作为TFS 2010构建的一部分,在TFS中分支(即不在某人的本地工作空间中).
这是我发现的最接近的讨论,我想要实现的目标:Microsoft Ajax Minifier - TFS 2010工作流 - TFS Build中的AjaxMin
我相信我会在构建工作流程中需要一个自定义代码活动,但不知道如何创建一个来解决这个问题.任何人都可以对部署之前允许缩小的过程有所了解吗?
好的 - 感谢这些答案和大量研究......我来到以下解决方案:)
从自定义代码活动开始,我尝试从C#代码运行minifier,然后将活动作为工作流的一部分调用.这不起作用,因为.dll版本的minifier暴露了几种压缩.js和.css文件的方法,然后让你打开某种类型的StreamWriter并用从中返回的压缩字符串重写该文件方法(如果您想覆盖现有文件).非常密集地打开和关闭文件,所以我对该解决方案并不十分满意.使用进程类运行带有-clobber选项的.exe(用于覆盖文件)也不理想并产生一些奇怪的结果(没有正确地缩小文件并在每个文件的头部写一些垃圾).
所以,你问,我解决的解决方案是写一个PowerShell脚本(我从这里开始 - 我稍后修改了一个命令行参数 - 这将是你项目的根文件夹.脚本以递归方式遍历每个文件(以及每个子目录的文件)并缩小内部的.css和.js.非常简洁.其中的骨骼看起来像这样:
$ScriptDirectory = $args[0]
Write-Host "Validating directory parameter: $ScriptDirectory"
Write-Host ""
if ((Test-Path -path $ScriptDirectory) -ne $True)
{
#Throw an error of some kind (the parameter passed in isn't a valid directory).
}
$Minifier = “C:\Program Files\Microsoft\Microsoft Ajax Minifier 4\AjaxMin.exe”
get-childitem $ScriptDirectory -recurse -force -include *.js, *.css -exclude *.min.js, *.min.css | foreach-object {&$Minifier $_.FullName -out $_.FullName -clobber}
Run Code Online (Sandbox Code Playgroud)
因此,我们遍历根文件夹的每个子项目,扩展名为.js或.css(忽略.min.*的扩展名,因为这些已经被压缩).
在TFS中,我们需要做的就是在TFS中添加执行PowerShell脚本的InvokeProcess步骤.您可以使用InvokeProcess活动的Arguments属性传递您的参数(开始minifiying的目录).
要获取TFS构建用于在代码发布之前编译代码的目录(临时工作空间,如果您愿意),可以在构建的Run On Agent序列中使用可用的SourcesDirectory变量.这是您的文件由TFS构建过程编译和打包的位置,因此在此处缩小的任何内容都将在最终部署包中结束.
PS - SourcesDirectory非常高 - 你可能不想从那里一直钻到你的.js和.css文件,所以你需要指定类似的东西:
SourcesDirectory + "/" + "MyProjectFolder/Scripts"
Run Code Online (Sandbox Code Playgroud)
确保在代码部署到工作流之前添加此InvokeProcess步骤并且hey-presto - 您将拥有缩小的.js和.css文件,这些文件仅将原始文件名保留为TFS构建的一部分而不是本地文件名.
非常感谢所有回答并指出我正确方向的人.我希望这可以帮助一路上的人!
| 归档时间: |
|
| 查看次数: |
4138 次 |
| 最近记录: |