15

Octopus は、それ自体が驚くべきものであるにもかかわらず、Web アプリをアップグレードする前にシャットダウンすることについて、かわいらしくも賢くも何もしていないことに気がつきませんでした。

私たちのソリューションには、同じデータベースに依存する 2 つの Web アプリ (Web サイトと別の API Web アプリ) があるため、一方がアップグレードされている間、もう一方はまだ稼働しており、その間も Web または API 要求が処理されている可能性があります。データベースはアップグレード中です。

きれいじゃない!

Clean は、Octopus が Web アプリをシャットダウンし、シャットダウンされるまで待ってからアップグレードを続行し、完了したらアプリ プールをオンラインに戻すことです。

それはどのように達成できますか?

4

4 に答える 4

17

自撮り回答!

Octopus-deploy がデプロイメントに少し特別な注意を払うようにするのは簡単です。必要なのは、デプロイ ルーチンに追加のExecute-Powershellステップをいくつか追加することだけです。

アプリ プールを停止するための新しい最初のステップを追加します。

# Settings
#---------------
$appPoolName = "PushpayApi" # Or we could set this from an Octopus environment setting.

# Installation
#---------------
Import-Module WebAdministration     
       # see http://technet.microsoft.com/en-us/library/ee790588.aspx

cd IIS:\


if ( (Get-WebAppPoolState -Name $appPoolName).Value -eq "Stopped" )
{
    Write-Host "AppPool already stopped: " + $appPoolName
}

Write-Host "Shutting down the AppPool: " + $appPoolName
Write-Host (Get-WebAppPoolState $appPoolName).Value

# Signal to stop.
Stop-WebAppPool -Name $appPoolName

do
{
    Write-Host (Get-WebAppPoolState $appPoolName).Value
    Start-Sleep -Seconds 1
}
until ( (Get-WebAppPoolState -Name $appPoolName).Value -eq "Stopped" )
# Wait for the apppool to shut down.

最後に別のステップを追加して、アプリ プールを再起動します。

# Settings
#---------------
$appPoolName = "PushpayApi"

# Installation
#---------------
Import-Module WebAdministration     
       # see http://technet.microsoft.com/en-us/library/ee790588.aspx

cd IIS:\

if ( (Get-WebAppPoolState -Name $appPoolName).Value -eq "Started" )
{
    Write-Host "AppPool already started: " + $appPoolName
}

Write-Host "Starting the AppPool: " + $appPoolName
Write-Host (Get-WebAppPoolState $appPoolName).Value

# To restart the app pool ... 
Start-WebAppPool -Name $appPoolName

Get-WebAppPoolState -Name $appPoolName
于 2013-11-17T22:31:38.933 に答える
11

私たちが採用したアプローチは、アプリケーションと共に _app_offline.htm ( App Offline ) ファイルを展開することでした。そうすれば、サイトがダウンしている理由を説明する素敵なメッセージが表示されます。

次に、デプロイの時間になったら、Mircrosofts Webdeploy を使用して名前を app_offline.htm に変更します。名前の変更のコードを、Octopus デプロイの最初のステップとして実行される powershell スクリプトに入れます。

write-host "Website: $WebSiteName"

# Take Website Offline
$path = "$WebDeployPath";
$path

$verb = "-verb:sync";
$verb

# Take root Website offline
$src = "-source:contentPath=```"$WebSiteName/_app_offline.htm```"";
$src

$dest = "-dest:contentPath=```"$WebSiteName/app_offline.htm```"";
$dest
Invoke-Expression "&'$path' $verb $src $dest"; 


# Take Sub Website 1 offline
$src = "-source:contentPath=```"$WebSiteName/WebApp1/_app_offline.htm```"";
$dest = "-dest:contentPath=```"$WebSiteName/WebApp1/app_offline.htm```"";
Invoke-Expression "&'$path' $verb $src $dest"; 

通常、$WebSiteName は「既定の Web サイト」です。また、` は単一引用符ではなく、実際にはバッククォート文字であることに注意してください (通常、キーボードのチルダで見つかります)。

octopus が Web サイトを新しい場所に展開している場合、Web サイトは自動的にオンラインに戻ります。それを望まない場合は、app_offline ファイルを配置した状態で新しい Web サイトをデプロイできます。その後、次のスクリプトを使用して削除できます。

write-host $WebSiteName

# & "c:\Program Files (x86)\IIS\Microsoft Web Deploy V2\msdeploy.exe" -verb:delete -dest:contentPath="$WebSiteName/app_offline.htm"
# those arn't QUOTES!!!!, they are the back accent thing.  

write-host "Website: $WebSiteName"

# Put Web app Online.
$path = "$WebDeployPath";
$path

$verb = "-verb:delete";
$verb

$dest = "-dest:contentPath=```"$WebSiteName/app_offline.htm```"";
$dest
Invoke-Expression "&'$path' $verb $dest"; 

# Put Sub Website Online
$dest = "-dest:contentPath=```"$WebSiteName/WebApp1/app_offline.htm```"";
Invoke-Expression "&'$path' $verb $dest";
于 2013-11-18T15:31:21.890 に答える
2

apppool を停止したり、App_Offline ファイルを設定したりするだけでは十分ではありません。どちらも、サイトがダウンしている理由をクライアントに適切に説明していませんでした。特にApp_Offline。bin フォルダーをクリーンアップする必要があり、これにより YSOD ( http://blog.kurtschindler.net/more-app_offline-htm-woes/ ) が発生します。

私の解決策: 最初のタスクは、デプロイされたサイトを index.html のみを含む別のフォルダーにリダイレクトし、適切なメッセージを表示します。最後のタスクは元のフォルダーに戻します。

于 2015-10-22T08:24:48.657 に答える