Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment 如何以编程方式将BIDS构件部署到远程SQL Server实例?_Deployment_Tfs_Ssis_Ssas_Bids - Fatal编程技术网

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

Deployment 如何以编程方式将BIDS构件部署到远程SQL Server实例?,deployment,tfs,ssis,ssas,bids,Deployment,Tfs,Ssis,Ssas,Bids,我希望按计划将SSI和SSAS工件自动部署到远程开发SQL Server 2005和2008实例 什么是最好的解决方案?我使用TFS 2008作为源代码管理系统,因此我希望将解决方案与MSBuild和计划的团队构建集成。SSIS是最简单的,当我使用SSIS时,我们将包存储在一个文件中,我们所要做的就是将文件复制到C:\Program Files\Microsoft SQL Server\90\DTS\packages中的正确目录。可以通过将复制任务添加到MSBuild的末尾来执行此操作。我不确定

我希望按计划将SSI和SSAS工件自动部署到远程开发SQL Server 2005和2008实例


什么是最好的解决方案?我使用TFS 2008作为源代码管理系统,因此我希望将解决方案与MSBuild和计划的团队构建集成。

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

至于SSA,我从来没有考虑过自动化它,但是,你会想研究分析管理对象(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>

C:\ProgramFiles(x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe
“$(DevEnvTool)”“$(MSBuildProjectDirectory)\Nexus\u VS2008.sln”/Build

这将在TFS构建的drop文件夹中创建SSAS工件。使用一点powershell,就可以在TFS部署器的帮助下创建和部署SSAS多维数据集。powershell脚本至少需要执行“microsoft.analysisservices.deployment.exe”。该脚本还可用于更改SSA的各种配置设置。

我发现很多帖子都主张使用脚本VS来自动化构建,这在CI环境中并不总是可行的


通过进一步挖掘,我还发现了一个msbuild任务,用于在msbuild中创建.asdatabase文件。

首先,我总是建议将构建和部署过程分开。它们不是同一个,分离使使用更成熟的配置管理工作流更容易。这方面的一个例子是,能够将先前的构建(通过systest环境并给出了全部清除)作为发布候选升级到UAT环境。您不希望重建来执行此操作。捕获您的构建人工制品,并从中单独部署

无论如何

SSIS非常简单:构建所做的只是将包复制到输出文件夹中,所以您只需要以某种方式获取它们(取决于您使用什么来构建—我使用TeamCity)。然后在部署过程中,您可以非常轻松地使用将它们上载到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服务时,它也能工作)

SSAS要困难得多。虽然您可以使用一堆东西(我是在部署中使用的),但我从未找到一种简单的方法来获取解决方案构建的输出(如.asdatabase文件)并将其转换为从头创建olap数据库模式所需的XMLA。缺少了一个转换,我懒得去写

相反,我使用可以从命令行作为部署过程的一部分使用的,让它生成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运行部署的多维数据集,并根据环境的需要更新数据源。然后我开始一个过程

您没有要求,但是对于SSR,您可以从构建中获取RDL,并使用webservice API来部署它们,对于数据库,您显然会使用SQL GDR项目,并在那里使用命令行部署工具。综上所述,您可以从一个脚本部署整个BI项目,并对版本控制等进行严格控制

在过去5年左右的时间里,我在各种项目中使用了这些方法,并为此创建了一个真正有用的PowerShell库。总有一天我会把它们清理干净并放出去


[17/May]注意:SQL 2008 R2版本的部署向导(在SQL/100/文件夹中)被标记为GUI应用程序,而不是控制台应用程序(如2005年),因此之前编写的脚本不会等待完成!上面的代码更改为使用带有显式'-wait'的启动进程。这是一个问题。

脚本powershell是否使用powershell远程处理工作?