我有点疏忽发现Octopus虽然令人惊讶,但在升级前关闭你的网络应用并没有做任何可爱或聪明的事情.
在我们的解决方案中,我们有两个依赖于相同数据库的Web应用程序(一个网站和一个单独的API Web应用程序),因此当一个正在升级时,另一个仍处于活动状态,并且仍有可能仍在维护Web或API请求数据库正在升级.
不干净!
清理将是Octopus关闭Web应用程序,等到它们关闭然后继续升级,完成后将应用程序池重新联机.
怎么能实现呢?
Jas*_*ver 16
自拍回答!
使用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.
Run Code Online (Sandbox Code Playgroud)
然后在最后添加另一个步骤以重新启动应用程序池:
# 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
Run Code Online (Sandbox Code Playgroud)
RMK*_*RMK 11
我们采用的方法是使用应用程序部署_app_offline.htm(App Offline)文件.这样我们得到一个很好的消息,解释了网站失败的原因.
然后,当需要部署时,我们使用Mircrosofts Webdeploy将其重命名为app_offline.htm.我们将重命名代码放在PowerShell脚本中,该脚本作为Octopus部署的第一步运行.
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";
Run Code Online (Sandbox Code Playgroud)
$ WebSiteName通常是"默认网站".另请注意,`不是单引号,而是反引号字符(通常在键盘上的tilda中找到).
现在,如果章鱼将您的网站部署到新位置,您的网站将自动返回在线状态.如果您不希望这样,您可以部署具有app_offline文件的新网站.然后,您可以使用以下脚本将其删除.
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";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5515 次 |
| 最近记录: |