八达通 - 当前部署文件夹的备份

时间:2016-01-11 10:33:44

标签: backup rollback octopus

我想备份DLL和Web.Config,它们将在部署期间被替换,然后才能被替换,因此我可以轻松回滚以防部署失败。

人们说,“只需使用章鱼部署以前的版本”,但想象章鱼部署过程不再适用,在这种情况下,除了从备份中手动替换旧文件之外,您没有其他选择zip文件。

Octopus中是否有任何功能可以在触手中自动创建此zip文件?

2 个答案:

答案 0 :(得分:2)

我会将新版本部署到版本化目录,而不是覆盖以前部署的版本。 Octopus将是 /Applications/TEST/App.Name/1.2.1 / 等路径的默认安装应用程序,因此下一次安装将转到 /Applications/TEST/App.Name/1.3。 0 / 例如。然后,如果您想要回滚但发现您的部署过程中断了,您只需要重新指向以前的版本。如果这是IIS中的一个网站,那么你只需更改wwwroot目录 - 如果这是一个Windows服务,你只需使用旧路径安装它。

将此与生命周期相结合,以确保您保留一定数量的版本,并且无需编写任何自定义自定义代码。作为部署的一部分,我真的避免做任何手动操作,甚至回滚(解压缩先前的文件和复制内容等),因为这是我们人类引入错误的机会之窗。现在想象你必须在10台服务器上做到这一点...如果你真的想要有可重复的东西,那么你可以编写那么脚本,但是编写更改IIS中的根目录或安装服务路径的脚本要容易得多。 / p>

如果您在云中直接部署到Paas,那么可能就是这样的用例。 Octopus Library中有一个步骤可以帮助您解决这个问题。

希望这有帮助

答案 1 :(得分:1)

这有点旧,但我想我会在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),如果你的部署步骤更复杂,但对我来说我想快速回复。