Powershell 在交换暂存/生产插槽(交换VIP)之前,是否正在等待新部署完全初始化?
我使用以下代码将新部署的应用程序从暂存插槽交换到生产插槽(交换VIP): 我认为,-WaitToComplete标志将确保所有虚拟机在执行交换之前都已完全初始化,但是它没有,并且它执行交换,此时生产槽中新部署的应用程序仍在初始化,并且在完全初始化时大约5/10分钟不可用Powershell 在交换暂存/生产插槽(交换VIP)之前,是否正在等待新部署完全初始化?,powershell,azure,Powershell,Azure,我使用以下代码将新部署的应用程序从暂存插槽交换到生产插槽(交换VIP): 我认为,-WaitToComplete标志将确保所有虚拟机在执行交换之前都已完全初始化,但是它没有,并且它执行交换,此时生产槽中新部署的应用程序仍在初始化,并且在完全初始化时大约5/10分钟不可用 在执行交换VIP操作之前,确保应用程序完全初始化的最佳方法是什么?我猜您实际看到的可能是DNS条目传播和可用所需的延迟 您应该发现,一旦状态报告为就绪,您可能无法使用登台URL访问您的站点”http://.cloudapp.ne
在执行交换VIP操作之前,确保应用程序完全初始化的最佳方法是什么?我猜您实际看到的可能是DNS条目传播和可用所需的延迟 您应该发现,一旦状态报告为就绪,您可能无法使用登台URL访问您的站点”http://.cloudapp.net“你会发现它可能不会出现。。。但是,如果您查看管理门户,您将在属性的底部看到“VIP”的值-如果您使用该IP地址“http://xxx.xxx.xxx.xxx 您应该能够访问您的站点 当您进行交换时,您会发现类似的行为。DNS更新需要一些时间才能传播,但您可能会看到,您仍然可以使用IP地址或登台地址(如果已可用)访问站点 最后,一个问题…根据您的问题,您可能会将部署到暂存作为构建的一部分,然后立即升级到生产部署…这是否正确,如果正确,为什么不直接部署到生产部署?(我并不是说直接部署到生产环境中是一种最佳做法……但如果这是您的工作流程,我认为临时部署到暂存环境没有任何好处)
希望这能有所帮助!我猜您实际看到的可能是DNS条目传播和可用所需的延迟 您应该发现,一旦状态报告为就绪,您可能无法使用登台URL访问您的站点”http://.cloudapp.net“您会发现它可能不会出现……但是如果您查看管理门户,您会在属性的底部看到一个‘VIP’值—如果您使用该IP地址”http://xxx.xxx.xxx.xxx 您应该能够访问您的站点 当您进行交换时,您会发现类似的行为。DNS更新需要一些时间才能传播,但您可能会看到,您仍然可以使用IP地址或登台地址(如果已可用)访问站点 最后,一个问题…根据您的问题,您可能会将部署到暂存作为构建的一部分,然后立即升级到生产部署…这是否正确,如果正确,为什么不直接部署到生产部署?(我并不是说直接部署到生产环境中是一种最佳做法……但如果这是您的工作流程,我认为临时部署到暂存环境没有任何好处)
希望这能有所帮助!我对PowerShell不是很熟悉,但根据我对Shell的经验,您可以使用管道命令。管道字符(|)前面的每一组代表一个命令,该命令将其结果传递给管道中的下一个命令(管道字符后面的命令)。由于您在解聚完全完成之前执行这些命令,因此您将新部署的应用程序切换到生产槽 这里首先要注意的是,对于最后一个命令,实际上是Get OperationStatus,您有“-WaitToComplete”参数 我看到的另一件事是,这个powershell命令只会执行vip交换。部署呢 从您描述的情况来看,您的构建服务器似乎是自动部署到登台的,并且您有执行交换脚本的构建后事件。如果您的流程是这样的,那么Mike Erickson在这里的建议是有意义的-在部署到登台后立即交换。如果您要在不使用ch的情况下进行交换,为什么要部署到登台首先检查应用程序运行状况?但是我不建议直接解聚到服务器(删除+部署),但这是一个服务升级。因为当我们进行服务升级时,我们的部署会保留其公共IP地址。如果我们删除+部署,我们将获得一个新的公共IP地址。并且已保证在删除部署之前不会更改托管服务的公共IP地址 最后,您应该稍微扩展一下PowerShell脚本。首先包括一个例程,该例程将检查(并等待)暂存槽是否“就绪”,然后执行交换。正如我所说,我对PowerShell不太了解,但我相信这是可行的 只要我的2美分 更新 再次访问后,我现在了解到一些情况。您正在等待操作完成,但这是您正在等待完成的VIP-SWAP操作。如果您的部署尚未准备就绪,您必须等待它准备就绪。此外,正如Mike提到的,可能会有DNS延迟,这一点在最后指出: 注意: 如果您在推广后不久访问生产站点,DNS 名称可能未准备好。如果遇到DNS错误(404),请稍候 几分钟后重试。请记住,Windows Azure会创建DNS 动态命名条目,更改可能需要几分钟 传播 更新2
嗯,您必须查询所有角色及其所有实例,并等待它们全部就绪。技术上,您可以在每个角色至少有一个实例就绪的情况下进行VIP交换,但我认为这会使脚本更加复杂。我对PowerShell不是很熟悉,但根据我使用shells的经验
Get-HostedService -serviceName $serviceName -subscriptionId $subcription -certificate $certificate | Get-Deployment -slot staging | Move-Deployment |Get-OperationStatus –WaitToComplete
$hostedService = "YOUR_SERVICE_NAME"
do {
# query the status of the running instances
$list = (Get-AzureRole -ServiceName $hostedService `
-Slot Staging `
-InstanceDetails).InstanceStatus
# total number of instances
$total = $list.Length
# count the number of ready instances
$ready = ($list | Where-Object { $_ -eq "ReadyRole" }).Length
Write-Host "$ready out of $total are ready"
$notReady = ($ready -ne $total)
If ($notReady) {
Start-Sleep -s 10
}
}
while ($notReady)
$hostedService = "YOUR_SERVICE_NAME"
# Wait roughly 10 minutes, plus time required for Azure methods
$remainingTries = 6 * 10
do {
$ready=0
$total=0
$remainingTries--
# query the status of the running instances
$list = (Get-AzureRole -ServiceName $hostedService -Slot Staging -InstanceDetails).InstanceStatus
# count the number of ready instances
$list | foreach-object { IF ($_ -eq "ReadyRole") { $ready++ } }
# count the number in total
$list | foreach-object { $total++ }
"$ready out of $total are ready"
if (($ready -ne $total) -and ($remainingTries -gt 0)) {
# Not all ready, so sleep for 10 seconds before trying again
Start-Sleep -s 10
}
else {
if ($ready -ne $total) {
throw "Timed out while waiting for service to be ready: $hostedService"
}
break;
}
}
while ($true)