これは少し古いですが、octo のプロセスで行っていることを追加すると思いました。
子ステップを使用してローリング デプロイを実行します。
以前の IIS パスを出力変数に記録するための PowerShell ステップがあります。
Import-Module 'WebAdministration'
Write-Host ('IIS:\Sites\Online-' + $OctopusParameters["Octopus.Environment.Name"])
$formerPath = (Get-ItemProperty -Path ('IIS:\Sites\Site-' + $OctopusParameters["Octopus.Environment.Name"]) -Name physicalPath)
if($formerPath.length -gt 0) {
Set-OctopusVariable -Name 'FormerIISPath' -Value $formerPath
Write-Host "Former path is '$formerPath'"
}
次に、デプロイに必要な作業を行い、各ローリング デプロイを手動で確認します。
その手動のステップがキャンセルされた場合、次の powershell スクリプトを持つ失敗した子アイテムのセットがあります。
$formerPath = $OctopusParameters["Octopus.Action[Set previous path].Output.FormerIISPath"]
if($formerPath.Length -gt 0) {
Import-Module 'WebAdministration'
$currentPath = (Get-ItemProperty -Path ('IIS:\Sites\Online-' +
$OctopusParameters["Octopus.Environment.Name"]) -Name physicalPath)
if($currentPath -ne $formerPath) {
Set-ItemProperty -Path ('IIS:\Sites\Site-' + $OctopusParameters["Octopus.Environment.Name"]) -Name 'physicalPath' -Value $formerPath
Write-Host "Deployment failed, reverted to former path - '$formerPath'"
}
}
これにより、すべてのサーバーが以前に表示されていたものに戻ります。
また、デフォルトのパッケージの場所を使用し、以前のファイルを上書きしないことを付け加えておきます。もう 1 つのオプションは、展開手順がより複雑であるが、私にとっては迅速にフェールバックしたい場合に、octo で REST API を使用して以前の成功した展開をトリガーすることです (param は octo にあります)。