【发布时间】:2008-11-24 09:57:59
【问题描述】:
我想按计划自动将我的 SSIS 和 SSAS 工件部署到远程开发 SQL Server 2005 和 2008 实例。
什么是最好的解决方案?我使用 TFS 2008 作为源代码控制系统,因此我想将该解决方案与 MSBuild 和计划的 Team Build 集成。
【问题讨论】:
标签: deployment tfs ssis ssas bids
我想按计划自动将我的 SSIS 和 SSAS 工件部署到远程开发 SQL Server 2005 和 2008 实例。
什么是最好的解决方案?我使用 TFS 2008 作为源代码控制系统,因此我想将该解决方案与 MSBuild 和计划的 Team Build 集成。
【问题讨论】:
标签: deployment tfs ssis ssas bids
在 SSIS 方面无法提供帮助,但我可以在 SSAS 和 TFS 2010 方面提供帮助。
SSAS 项目不会在 2010 年使用 Team Build 进行构建。要使构建正常工作,需要调用 devenv.exe 进行构建的 msbuild 项目,然后将文件复制到 Team Build 输出目录。
这是我之前使用过的示例项目:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<PropertyGroup>
<DevEnvTool Condition="'$(DevEnvTool)'==''">C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe</DevEnvTool>
<DevEnvBuildCommand>"$(DevEnvTool)" "$(MSBuildProjectDirectory)\Nexus_VS2008.sln" /Build</DevEnvBuildCommand>
</PropertyGroup>
<Exec Command="$(DevEnvBuildCommand)" />
<ItemGroup>
<SSASSourceFiles Include="$(MSBuildProjectDirectory)\Readify.Nexus.Analysis\bin\Readify.Nexus.Analysis.*"/>
</ItemGroup>
<Copy SourceFiles="@(SSASSourceFiles)" DestinationFolder="$(OutDir)" />
</Target>
</Project>
这将在 TFS 构建的放置文件夹中创建 SSAS 工件。使用一点 powershell,可以在 TFS Deployer 的帮助下创建和部署 SSAS 多维数据集。 powershell 脚本至少需要执行“microsoft.analysisservices.deployment.exe”。该脚本还可用于更改 SSAS 的各种配置设置。
【讨论】:
首先,我总是建议将构建和部署过程分开。它们不是一回事,分离使使用更成熟的配置管理工作流变得更容易。这方面的一个例子是能够将以前的构建(通过 systest 环境并给出全部清除)提升到 UAT 环境作为发布候选。您不想重建 来执行此操作。捕获您的构建工件,并从它们单独部署。
无论如何...
SSIS 相当简单:构建过程实际上是将包复制到输出文件夹中,因此您只需要以某种方式获取它们(取决于您用于构建的内容 - 我使用 TeamCity)。然后在您的部署过程中,您可以相当轻松地使用SMO 将它们上传到 SSIS 服务器:
$app = new-object Microsoft.SqlServer.Dts.Runtime.Application
$app.SaveToSqlServerAs($packageObj, $null, "\\$folderName\$($packageObj.Name)$packageNameSuffix", $serverName, $null, $null);
(有趣的是,这似乎不是通过 SSIS 服务本身,而是通过 MSDB 存储的 proc API。这两种方式都没有太大区别,但即使用户无权访问 SSIS,它也可以工作远程服务因为that DCOM issue)
SSAS 更难。虽然您可以使用AMO 做很多事情,我将其作为部署的一部分,但我从未找到一种从解决方案构建中获取输出的简单方法(例如 .asdatabase文件)并将它们转换为从头开始创建 olap 数据库模式所需的 XMLA。缺少一个转换,我懒得写。
我使用SSAS deployment utility,它可以作为部署过程的一部分从命令行使用,获取it 以生成 XMLA,然后执行它:
$asDeploy = "$programfiles32\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.AnalysisServices.Deployment.exe"
write-host "Generating XMLA"
start-process -wait -FilePath:$asDeploy -ArgumentList:"$pwd\..\bin\MyOlap\MyOlap.asdatabase","/d","/o:$pwd\MyOlap.xmla"
if (-not $?){
throw "Failed to generate XMLA: errors were reported above";
}
write-host "Deploying SSAS Database"
.\ascmd.exe -S $olapServer -i "$pwd\MyOlap.xmla"
if (-not $?){
throw "Failed to deploy cube: errors were reported above";
}
我确保上面的部署不处理多维数据集(我重写了 .deploymentoptions 文件),以便我可以随后使用 AMO 运行已部署的多维数据集,并根据该环境的需要更新数据源。 然后我开始一个进程。
您没有问,但是对于 SSRS,您可以从构建中获取 RDL,并使用 Web 服务 API 来部署它们,显然对于数据库,您将使用 SQL GDR 项目,并使用命令行部署那里的工具。总之,您可以从单个脚本部署整个 BI 项目,对版本控制等进行相当严格的控制...
在过去 5 年左右的时间里,我在各种项目中使用了这些方法,并为此积累了一个非常有用的 PowerShell 库。总有一天我会把它们清理干净并释放它们。
[17/May] 注意:部署向导的 SQL 2008 R2 版本(在 SQL/100/ 文件夹中)被标记为 GUI 应用程序,而不是控制台应用程序(如 2005 ),因此之前编写的脚本不会等待它完成!上面的代码改为使用带有显式“-wait”的启动进程。这是nasty gotcha。
【讨论】:
SSIS 是最简单的,当我使用 SSIS 时,我们将包存储在一个文件中,我们要做的就是将文件复制到 C:\Program Files\Microsoft SQL Server\90\DTS\Packages 中的正确目录.您可以通过将复制任务添加到 MSBuild 的末尾来执行此操作。我不确定 xml 在输出目录中是否默认可用,因此请注意。
至于 SSAS,我从来没有考虑过将其自动化,但是,您会想要查看分析管理对象 (AMO),从在线书籍中提取它说:
分析管理对象 (AMO) 提供了一个编程接口 可供分析服务使用的完整命令集 开发商。因此,AMO 可用于部署,也可用于 它支持的许多管理命令。更多 有关 AMO 用户的信息,以自动化任何类型的 管理任务,请参阅分析管理对象 (AMO)。
【讨论】:
我发现很多帖子提倡使用脚本 VS 来自动构建,这在 CI 环境中并不总是可行的。
经过深入挖掘,我还发现了http://sqlsrvanalysissrvcs.codeplex.com/,其中包含一个用于在 msbuild 中创建 .asdatabase 文件的 msbuild 任务。
【讨论】: