我想按计划自动将我的 SSIS 和 SSAS 工件部署到远程开发 SQL Server 2005 和 2008 实例。
什么是最好的解决方案?我使用 TFS 2008 作为源代码控制系统,因此我想将该解决方案与 MSBuild 和计划的 Team Build 集成。
我想按计划自动将我的 SSIS 和 SSAS 工件部署到远程开发 SQL Server 2005 和 2008 实例。
什么是最好的解决方案?我使用 TFS 2008 作为源代码控制系统,因此我想将该解决方案与 MSBuild 和计划的 Team Build 集成。
SSIS 是最简单的,当我使用 SSIS 时,我们将包存储在一个文件中,我们要做的就是将文件复制到 C:\Program Files\Microsoft SQL Server\90\DTS\Packages 中的正确目录。您可以通过将复制任务添加到 MSBuild 的末尾来执行此操作。我不确定 xml 在输出目录中是否默认可用,因此请注意。
至于 SSAS,我从来没有把它自动化,但是,你会想要查看分析管理对象 (AMO),从网上的书籍中提取它说:
分析管理对象 (AMO) 为开发人员可用的 Analysis Services 的完整命令集提供了一个编程接口。因此,AMO 可用于部署,也可用于它所支持的许多管理命令。有关使用 AMO 自动执行任何类型的管理任务的更多信息,请参阅分析管理对象 (AMO)。
无法帮助 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 服务,它也可以工作,因为那个 DCOM问题)
SSAS 更难。虽然您可以使用AMO做很多事情,这是我部署的一部分,但我从来没有找到一种简单的方法来从解决方案构建中获取输出(如 .asdatabase 文件)并将它们转换为所需的 XMLA从头开始创建 olap 数据库模式。缺少一个转换,我懒得写。
相反,我使用SSAS 部署实用程序,它可以作为部署过程的一部分从命令行使用,让它生成 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 库。有一天我会清理这些并释放它们。
[5 月 17 日]注意: SQL 2008 R2 版本的部署向导(在 SQL/100/ 文件夹中)被标记为 GUI 应用程序,而不是控制台应用程序(如 2005 年那样),因此之前编写的脚本没有不要等待它完成!上面的代码改为使用带有显式“-wait”的启动进程。这是一个讨厌的问题。
我发现很多帖子提倡使用脚本 VS 来自动化构建,这在 CI 环境中并不总是可行的。
通过更多的挖掘,我还发现了http://sqlsrvanalysissrvcs.codeplex.com/,其中包含一个用于在 msbuild 中创建 .asdatabase 文件的 msbuild 任务。