【问题标题】:How to use MSBuild with TFS and SSIS如何将 MSBuild 与 TFS 和 SSIS 一起使用
【发布时间】:2014-07-07 09:50:42
【问题描述】:

我是使用 TFS 构建定义和 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(参见结尾):

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 有什么用处?

这里是 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"

【问题讨论】:

  • 在构建过程模板编辑器中,是否传入MSBuild Arguments?
  • 运行构建定义时出现此错误:MSBUILD:错误 MSB1008:只能指定一个项目。切换:C:\Users\me\Desktop\Buildssis\SSIS.MSBuild.proj
  • 错误是当我在我的 MSBuild Arguments 中尝试这一行时: "C:\Users\me\Desktop\Buildssis\SSIS.MSBuild.proj" /t:SSISBuild,SSISDeploy /p:SSISProj= "MySSISProject",Configuration="SIT",SSISServer="AB-CDE-FGH-I1\DEV",ProjectName="MySSISProject"
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe C:\Users\me\Desktop\Buildssis\SSIS.MSBuild.proj /t:SSISBuild /p:SSISProj="MySSISProject",Configuration="SIT" 提供指向 .NET 框架的显式路径,这是否会改善这种情况。
  • 是否需要在 TFS 构建定义 MSBuild Arguments 中添加命令 MSBuild.exe?我会试试看...

标签: tfs ssis msbuild


【解决方案1】:

要回答您的问题,最好的方法是使用 UpgradeBuildTemplate 进行团队构建。

修改构建脚本以调用您在构建的“AfterCompile”目标中创建的任务。见下文

http://msdn.microsoft.com/en-us/library/aa337604(v=vs.100).aspx

您可以在团队构建定义中传递构建参数。如果您编辑构建定义并编辑流程,您将看到传递 MSBuild 参数的选项。

【讨论】:

  • 好的,我会这样做,当用户签入代码时,Joe 会知道是否使用 SIT、SYS 等吗? IE。如何自动化,还是必须手动
  • 您可以将其默认为 DEV,并为 SIT、SYS 等手动构建触发器。通常,每次签入都需要一个 BVT,您可以通过 CI 构建触发它。您做出明智的决定,为系统集成测试或系统测试部署构建,您可以手动触发
【解决方案2】:

我认为您对解决方案非常了解。您可以在控制台应用程序中调用您的包并在那里设置变量。并针对不同的 DEV、SIT、SYS、UAT、PRD。您可以拥有控制台应用程序的配置文件。然后您可以在控制台应用程序中设置包变量。我希望它能解决这个难题。我能理解的。

如果这与您的问题无关,请告诉我,然后再解释一下您的问题。

【讨论】:

    猜你喜欢
    • 2015-08-18
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多