【发布时间】:2015-08-18 19:03:54
【问题描述】:
我想自动化我的 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 项目。
问题:
如何使用它以使其自动化,以便我可以在 VS/TFS 中手动启动构建和部署?使用构建定义。
如何确保选择了正确的配置和正确的目标服务器?例如,我们有 DEV、SIT、SYS、UAT、PRD 的 SSIS 配置。每个都有自己的服务器名称。我是否需要为每个环境单独定义构建定义,还是有办法使用一个构建定义?
以某种方式使用 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 中没有对 SSIS 的适当支持。我只是使用 devenv.exe 进行构建。这意味着需要在服务器上安装 VS,但无论如何这就是你想要的 CI。至于部署,不要使用 CI 工具。查看 Release Management(Microsoft 的产品)或 OctopusDeploy 以供初学者使用。它们将允许您为每个环境指定不同的值。