TFS - 在部署之前针对包运行Powershell脚本

时间:2014-10-25 13:51:12

标签: powershell tfs continuous-integration continuous-deployment

我目前在TFS 2013中有一个CI设置,它执行以下操作

  1. 在每次提交到分支时从Git中删除代码
  2. 构建解决方案
  3. 根据解决方案运行N单元测试
  4. 针对javascript运行Jasmine前端测试
  5. 通过WebDeploy成功部署到所选服务器。
  6. 我现在已经设法在服务器上安装Grunt和NodeJS,以便在步骤5-6之间对Javascript进行一些操作。有没有人对如何做到这一点有任何建议?

    我已尝试使用后期测试脚本在 src bin / _PublishedWebsites 目录上成功缩小javascript,但这似乎不会持续到部署服务器。事实上,由于Windows文件(argh)上的最大字符限制,_PublishedWebsites路由将构建文件夹置于不可删除状态。

2 个答案:

答案 0 :(得分:2)

您应切换到使用Visual Studio 2013的发布管理(也适用于2012)。这允许您参数化您的版本并在多个环境中推送相同的输出。非常可配置,甚至可以确保您所需的工具最终在您部署到的服务器上。支持Puppet,Chef,DSC,并创建自己的。

http://nakedalm.com/installing-release-management-server-tfs-2013/

概述:http://nakedalm.com/building-release-pipeline-release-management-visual-studio-2013/

答案 1 :(得分:0)

我设法通过在用于部署的pubxml文件中添加两个额外步骤来实现此目的。

首先,我添加了一个依赖PowerShell脚本,它运行了NPM安装和grunt任务。

<PipelineDependsOn>
  CustomBeforePublish;
  $(PipelineDependsOn);
</PipelineDependsOn>
<Target Name="CustomBeforePublish">
<Exec Command="powershell.exe -ExecutionPolicy Unrestricted -file  Pre_Deploy_Javascript_Build.ps1 $(ProjectDir)"/>
</Target>

跟着这个。我现在创建了项目中不存在的其他文件。我现在必须确保这些内容已经公布。为此,我又添了一步。

 <CopyAllFilesToSingleFolderForMsdeployDependsOn>
  CopyMinJSFiles;
  $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn >
<Target Name="CopyMinJSFiles">
<ItemGroup>
  <_MinJSFiles Include="$(ProjectDir)\App\*.js" />
  <FilesForPackagingFromProject  Include="%(_MinJSFiles.Identity)">
    <DestinationRelativePath>App\%(Filename)%(Extension)</DestinationRelativePath>
  </FilesForPackagingFromProject>
</ItemGroup>