我想我SSIS和SSAS文物部署2005 & 2008實例計劃的基礎上,以自動化的遠程開發的SQL Server。如何以編程方式將BIDS構件部署到遠程SQL Server實例?
什麼是我們的最佳解決方案?我使用TFS 2008作爲源代碼控制系統,所以我想將該解決方案與MSBuild和預定的Team Build集成在一起。
我想我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。
腳本powershell是否可以使用Powershell遠程處理? – Kiquenet 2014-06-06 11:46:35