如何以编程方式将BIDS构件部署到远程SQL Server实例?

问题描述:

我想我SSIS和SSAS文物部署2005 & 2008实例计划的基础上,以自动化的远程开发的SQL Server。如何以编程方式将BIDS构件部署到远程SQL Server实例?

什么是我们的最佳解决方案?我使用TFS 2008作为源代码控制系统,所以我想将该解决方案与MSBuild和预定的Team Build集成在一起。

SSIS是最简单的,当我使用SSIS时,我们将我们的软件包存储在一个文件中,我们所要做的就是将文件复制到C:\ Program Files \ Microsoft SQL Server \ 90 \ DTS \包。你可以通过将复制任务添加到MSBuild的末尾来完成。我不确定在输出目录中默认情况下xml是否可用,所以请注意。

至于SSAS,我从来没有得到周围自动化,但,你会想看看分析管理对象(AMO),从书本上拉线上,它说:

分析管理对象(AMO)提供一个编程接口 Analysis Services的完整的指令集作为提供给 开发商。因此,AMO可以用于部署,也可以用于支持许多其他管理命令。有关AMO的用户更多的 信息自动化任何 管理任务,请参阅分析管理对象(AMO)。

不能帮助SSIS的,但我可以用SSAS和TFS 2010年帮助

一个SSAS项目与团队建设不会建立在2010年获得了构建工作需要调用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部署者的帮助下创建和部署SSAS多维数据集。至少powershell脚本需要执行“microsoft.analysisservices.deployment.exe”。该脚本还可用于更改SSAS的各种配置设置。

我发现很多帖子崇尚脚本VS自动生成,这并不总是可能在CI的环境。

多一点挖我也发现http://sqlsrvanalysissrvcs.codeplex.com/其中包括在创建的MSBuild文件.asdatabase的MSBuild任务。

首先,我总是建议更换分离该构建和部署过程。它们不是相同的,分离使得使用更成熟的配置管理工作流程变得更加容易。一个例子就是能够推动以前的版本(这是通过一个系统的环境,并给予所有明确的)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存储过程API。并不是说这两种方法都有很大的区别,但即使用户由于that DCOM issue

而无法远程访问SSIS服务,它也可以工作。SSAS要困难得多。虽然您可以使用AMO做一堆东西,我将其部署为部分,但我从来没有找到从解决方案构建(如.asdatabase文件)获取输出的简单方法,并将它们转换为XMLA需要从头开始创建olap数据库模式。有一个转型缺失,我不能写信。

相反,我用的是SSAS deployment utility,它可以在命令行中使用的部署过程的一部分,得到生成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,并使用webservice API部署它们,显然对于使用SQL GDR项目的数据库,并使用命令行部署工具。综合起来,你可以从一个脚本部署一个完整的商业智能项目,对版本控制等进行严格的控制。

我在过去的5年左右在各种项目中使用了这些方法,并且开发了一个真正的库有用的PowerShells这样做。有一天我会清理并释放它们。

[17/5] 注意: SQL 2008 R2版本的部署向导(在SQL/100 /文件夹中)被标记为GUI应用程序,而不是控制台应用程序(如2005年)以前编写的脚本不会等待它完成!上面的代码改为使用start-process,而不是显式的'-wait'。这是一个nasty gotcha

+0

脚本powershell是否可以使用Powershell远程处理? – Kiquenet 2014-06-06 11:46:35