2016-03-04 181 views
2

我在TeamCity上使用Octopus将数据库部署到我们的生产环境,但它一直给出错误。Octopus Deploy.ps1 DACPAC部署失败

这里是Deploy.ps1代码:

$dbName = $OctopusParameters['DBName'] 
$dbUser = $OctopusParameters['AdminDBUsername'] 
$dbPassword = $OctopusParameters['AdminDBPassword'] 
$dbSource = $OctopusParameters['DBDataSource'] 

# Set params 
if (! $dbName) 
{ 
    Write-Host "Missing required variable dbName" -ForegroundColor Yellow 
    exit 1 
} 
if (! $dbUser) 
{ 
    Write-Host "Missing required variable dbUser" -ForegroundColor Yellow 
    exit 1 
} 
if (! $dbPassword) 
{ 
    Write-Host "Missing required variable dbPassword" -ForegroundColor Yellow 
    exit 1 
} 
if (! $dbSource) 
{ 
    Write-Host "Missing required variable dbSource" -ForegroundColor Yellow 
    exit 1 
} 

# Add the DLL 
# For 64-bit machines 
Add-Type -path ((Get-Item -Path ".\" -Verbose).FullName + "\bin\Microsoft.SqlServer.TransactSql.ScriptDom.dll") 
Add-Type -path ((Get-Item -Path ".\" -Verbose).FullName + "\bin\Microsoft.SqlServer.Dac.dll") 

# Create the connection string 
$d = New-Object Microsoft.SqlServer.Dac.DacServices ("data source=" + $dbSource + ";User Id = " + $dbUser + ";pwd=" + $dbPassword) 

#Load the dacpac 
$dacpac = ((Get-Item -Path ".\" -Verbose).FullName + "\DeployScripts\Database.dacpac") 
$dacpacoptions = ((Get-Item -Path ".\" -Verbose).FullName + "\DeployScripts\publish.xml") 

#Load dacpac from file & deploy to database 
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpac) 

#Read a publish profile XML to get the deployment options 
$dacProfile = [Microsoft.SqlServer.Dac.DacProfile]::Load($dacpacoptions) 

# Deploy the dacpac 
$d.Deploy($dp, $dbName, $TRUE, $dacProfile.DeployOptions) 

这里是发布配置的情况下,它的问题:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <IncludeCompositeObjects>True</IncludeCompositeObjects> 
    <TargetDatabaseName>MyDatabase</TargetDatabaseName> 
    <DeployScriptFileName>MyDatabase.sql</DeployScriptFileName> 
    <ProfileVersionNumber>1</ProfileVersionNumber> 
    <BlockWhenDriftDetected>True</BlockWhenDriftDetected> 
    <RegisterDataTierApplication>True</RegisterDataTierApplication> 
    </PropertyGroup> 
</Project> 

下面是我得到的错误:

异常使用“4”参数调用“部署”:

“部署计划基因期间发生错误配给。部署无法继续“

在Deploy.ps1:60字符:2

$ d.Deploy($ DP,$ DBNAME,$ True时,$ dacProfile.DeployOptions)

~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~

CategoryInfo:NotSpecified:(:) [],ParentContainsErrorRecordException

FullyQualifiedErrorId:DacServicesException

有没有人有任何想法可以导致这一点?以及如何解决它?提前致谢!

回答

5

好吧,我想通了。下面是我所做的:

在PS1文件中添加一个try catch块,其中$ d.Deploy被称为像这样:

try 
{ 
    # Deploy the dacpac 
    $d.Deploy($dp, $dbName, $TRUE, $dacProfile.DeployOptions) 
} 
catch 
{ 
    Write-Host "LoadException"; 
    $Error | format-list -force 
    Write-Host $Error[0].Exception.ParentContainsErrorRecordException; 
} 

这样做可以告诉我,sqlproj文件的目的是SQL服务器2014年,但部署的数据库是Sql Server 2012.只需进入sql项目文件的属性并进行更改,以便它针对Sql Server 2012,现在它可以工作!好哇!