如何将MSBuild与TFS一起用于SSIS构建

时间:2015-06-04 08:52:32

标签: tfs ssis msbuild

我想自动化我的SSIS构建和部署,并创建一个构建定义,每当我排队时,它将构建和部署我的SSIS项目。

我找到了这个项目:http://sqlsrvintegrationsrv.codeplex.com/releases/view/82369

允许您创建一个可以放在C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies

中的DLL

然后你可以在visual studio命令行中使用这样的某些参数调用SSIS.MSBuild.proj(参见end):

MSBuild SSIS.MSBuild.proj /t:SSISBuild,SSISDeploy /p:SSISProj="MySSISProject",Configuration="DEV",,SSISServer="AB-CDE-FGH-I1\DEV",ProjectName="MySSISProject"

或者我可以把它放在这样的BAT文件中:

%systemroot%\Microsoft.Net\Framework\v4.0.30319\MSBuild.exe SSIS.MSBuild.proj /t:SSISBuild,SSISDeploy /p:SSISProj="MySSISProject",Configuration="DEV",,SSISServer="AB-CDE-FGH-I1\DEV",ProjectName="MySSISProject"

运行BAT文件时,它可以正常工作,它可以构建和部署SSIS项目。

问题:

  1. 我如何使用它以使其自动化,因此我可以从VS / TFS中手动启动构建和部署?使用构建定义。

  2. 如何确保选择正确的配置和正确的目标服务器?例如,我们有DEV,SIT,SYS,UAT,PRD的SSIS配置。每个都有自己的服务器名称。我是否需要为每个环境单独构建定义,或者是否有使用一个构建定义的方法?

  3. 以某种方式使用PowerShell有用吗?

  4. 这是SSIS.MSBuild.proj:

    <?xml version="1.0" encoding="Windows-1252"?>
    <Project  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
              DefaultTargets="SSISBuild;SSISDeploy">
      <!--Requires a property called $(SSISProj) to be defined when this script is called-->
      <UsingTask TaskName="DeploymentFileCompilerTask" AssemblyFile="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\Microsoft.SqlServer.IntegrationServices.Build.dll" />
      <Target Name="SSISBuild" Condition="'$(SSISProj)' != ''">
        <PropertyGroup>
          <SSISProjPath>$(SSISProj)\$(SSISProj).dtproj</SSISProjPath>
        </PropertyGroup>
        <Message Text="**************Building SSIS project: $(SSISProjPath) for configuration: $(CONFIGURATION)**************" />
        <DeploymentFileCompilerTask
          InputProject="$(SSISProjPath)"
          Configuration="$(CONFIGURATION)"
          ProtectionLevel="DontSaveSensitive">
        </DeploymentFileCompilerTask>
      </Target>
    
      <UsingTask TaskName="DeployProjectToCatalogTask" AssemblyFile="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\Microsoft.SqlServer.IntegrationServices.Build.dll" />
      <Target Name="SSISDeploy" Condition="'$(SSISProj)' != ''">
        <Message Text="**************Publishing SSIS project: $(SSISProj) to: $(SSISServer) to folder: $(PROJECTNAME)**************" />
        <PropertyGroup>
          <ISPac>$(SSISProj)\bin\$(CONFIGURATION)\$(SSISProj).ispac</ISPac>
        </PropertyGroup>
        <DeployProjectToCatalogTask
              DeploymentFile="$(ISPac)"
              Instance="$(SSISServer)"
              Folder="$(PROJECTNAME)"
              CreateFolder="true"/>
      </Target>
    </Project>
    

    编辑 我尝试将一些MSBuild参数添加到TFS构建定义中。我尝试了各种参数组合,一些用引号,一些没有。我无法让它发挥作用。

    "C:\Users\me\Desktop\Buildssis\SSIS.MSBuild.proj" /t:SSISBuild,SSISDeploy /p:SSISProj="MySSISProject",Configuration="SIT",SSISServer="AB-CDE-FGH-I1\DEV",ProjectName="MySSISProject"
    

    但我总是得到这个错误:

    MSBUILD : error MSB1008: Only one project can be specified.
    Switch: C:\Users\me\Desktop\Buildssis\SSIS.MSBuild.proj
    
    For switch syntax, type "MSBuild /help"
    

1 个答案:

答案 0 :(得分:0)

关于MSBUILD错误,在构建定义的进程部分中:

  • proj文件的路径进入“2. Build&gt; 1. Projects”
  • 部分
  • MSBUILD开关进入名为“2. Build&gt; 5. Advanced&gt; MSBUILD Arguments”的字段。

enter image description here