gpt4 book ai didi

powershell - Octopus Deploy.ps1 DACPAC 部署失败

转载 作者:行者123 更新时间:2023-12-01 10:35:43 27 4
gpt4 key购买 nike

我在 TeamCity 上使用 Octopus 将数据库部署到我们的生产环境,但它一直出现错误。

这是 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

有人知道是什么原因造成的吗?以及如何解决?提前致谢!

最佳答案

好的,伙计们,我想通了。这是我所做的:

在 ps1 文件中添加一个 try catch block ,其中 $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 Server 2014,但部署到的数据库是 Sql Server 2012。只需进入 sql 项目文件的属性并更改它,使其针对 Sql Server 2012 和现在可以了!万岁!

关于powershell - Octopus Deploy.ps1 DACPAC 部署失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35805208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com