我想备份在部署过程中要替换的DLL和Web.Config,然后再替换它们,以便在部署失败的情况下可以轻松回滚。
人们会说,“只需使用octopus部署以前的版本”,但想象一下octopus部署过程不再很好地工作,在这种情况下,除了从备份zip文件手动替换旧文件之外,您别无选择。
Octopus中是否有自动在触手中创建此zip文件的功能?
发布于 2016-03-15 04:28:05
我不会覆盖以前部署的版本,而是将新版本部署到版本化目录。Octopus将默认将应用程序安装到/Applications/TEST/App.Name/1.2.1/这样的路径,因此下一次安装将转到/Applications/TEST/App.Name/1.3.0/。然后,如果您想回滚,但发现您的部署过程已中断,您只需重新指向以前的版本。如果这是IIS中的一个网站,那么您只需更改wwwroot目录-如果这是一个windows服务,则只需使用旧路径安装它。
将它与生命周期结合起来,以确保您保持一定数量的版本可用,并且不需要编写任何自定义代码。我真的避免将任何手动操作作为部署的一部分,甚至回滚(解压缩之前的文件和复制内容等),因为这是我们人类引入错误的机会之窗。现在想象一下,你必须在10台服务器上做到这一点。如果你真的想有一些可重复的东西,那么你可以编写脚本,但是通过脚本更改IIS中的根目录或服务的安装路径要容易得多。
如果您要直接部署到云中的Paas,那么可能会有这样的用例。在Octopus Library中有一个步骤可以帮助你做到这一点。
希望这能有所帮助
发布于 2018-02-14 07:22:17
这有点老了,但我想我应该在octo中添加我在进程中所做的事情。
我使用子步骤运行滚动部署。
我有一个powershell步骤,用于在输出变量中记录前面的IIS路径。
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'"
}
}这将使所有服务器恢复到它们以前显示的状态。
我想补充的是,我也使用默认的包位置,并且从不覆盖以前的文件。另一种选择是在octo上使用REST API来触发之前成功的部署(param在octo上),如果您的部署步骤比较复杂,但对我来说,我想要快速回切。
https://stackoverflow.com/questions/34719295
复制相似问题