【问题标题】:In Octopus Deploy, how to require an approval when a major or minor version is deployed to an environment the first time?在 Octopus Deploy 中,第一次将主要或次要版本部署到环境时如何要求批准?
【发布时间】:2020-02-18 16:01:14
【问题描述】:

假设您有五个环境,开发、测试、UAT、阶段和生产。

对于这些环境,您具有以下生命周期: - 冲刺:开发 -> 测试 - 测试到产品:测试 -> UAT -> 阶段 -> 产品 - UAT 到 Prod:UAT -> Stage -> Prod - Hotfix: Stage -> Prod

发布版本类似于 2020.1.3。当新版本被删减时,它将更新版本号中的主要 (2020) 或次要 (1)。例如 2020.1.3 转到 2020.2.1 或 2021.1.1。错误修复或次要版本将更新最后一个数字 (3)。

问题在于,如果在错误的时间或意外将发布部署到测试、UAT 或阶段,它会阻止我们的测试人员。例如,QA 正在测试中测试 2020.1.3 版本。一位开发人员不小心将 2020.2 推到了测试阶段。这包括 QA 没有预料到的新代码。虽然 QA 正在测试 2020.1.x,但他们只想查看 2020.1.x 版本。

我们不想在我们的频道中使用version rules。每次削减新版本时,都必须更新版本规则。

第一次将主要或次要版本部署到环境时是否可能需要批准?

【问题讨论】:

    标签: octopus-deploy


    【解决方案1】:

    是的,这是可能的。为此,我们将使用output variablesrun conditions

    首先,在流程开始时添加了两个新步骤。

    这两个步骤都跳过了开发和生产,因为它们不受此问题的影响。每次主要/次要版本更改时都必须批准部署到 dev 将很快变老。并且所有生产版本至少必须先进入暂存阶段。

    第一步运行这个 PowerShell 脚本。它将将此特定环境的先前版本号与当前版本号进行比较。如果主要或次要版本不同,它会将输出变量“RequiresApproval”设置为 true。

    $releaseNumber = $OctopusParameters["Octopus.Release.Number"]
    $releaseNumberArray = $releaseNumber.Split('.')
    
    $lastVersion = $OctopusParameters["Octopus.Release.PreviousForEnvironment.Number"]
    $lastVersionArray = $lastVersion.Split('.')
    
    Write-Highlight "The previous version deployed to this environment was $lastVersion"
    
    $requiresApproval = $false
    if ($lastVersionArray[0] -ne $releaseNumberArray[0])
    {
        Write-Highlight "The previous major version $($lastVersionArray[0]) in $lastVersion is different than the one being deployed $($releaseNumberArray[0]) in $releaseNumber, this requires someone to approve"
        $requiresApproval = $true
    }
    elseif ($lastVersionArray[1] -ne $releaseNumberArray[1])
    {
        Write-Highlight "The previous minor version $($lastVersionArray[1]) in $lastVersion is different than the one being deployed $($releaseNumberArray[1]) in $releaseNumber, this requires someone to approve"
        $requiresApproval = $true
    }
    else
    {
        Write-Highlight "The previous version's major and minor versions are the same, skipping approval"
    }
    
    Set-OctopusVariable -name "RequiresApproval" -value $requiresApproval
    

    输出变量有点冗长,使用起来可能很棘手。为了使这更容易,请创建一个项目变量来引用它。

    在手动干预步骤中,将运行条件设置为该项目变量。

    现在是时候测试一下了。 UAT 目前拥有2020.1.2,而测试拥有2020.2.3。当2020.2.4 部署到测试时,不应出现手动干预。

    成功,跳过人工干预。

    UAT 目前有2020.1.22020.2.4 有一个新的次要版本,部署到 UAT 会提示用户手动干预。

    This YouTube Video 展示了这一点。

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 2012-10-11
      • 1970-01-01
      • 2014-01-23
      • 2013-01-06
      • 2013-12-12
      • 1970-01-01
      • 2012-05-05
      • 2020-10-16
      相关资源
      最近更新 更多