В Octopus Deploy, как требовать одобрения, когда основная или вспомогательная версия развертывается в среде в первый раз? - PullRequest
1 голос
/ 18 февраля 2020

Представьте, что у вас есть пять сред: Dev, Test, UAT, Stage и Production.

Для этих сред у вас есть следующие жизненные циклы: - Sprint: Dev -> Test - Test To Prod: Test -> UAT -> Stage -> Prod - UAT to Prod: UAT -> Stage -> Prod - Исправление: Stage -> Prod

Версия релиза выглядит как 2020.1.3. Когда новый выпуск сокращен, он или обновит основной (2020) или вспомогательный (1) номер версии. Например, 2020.1.3 относится к 2020.2.1 или 2021.1.1. Исправление ошибки или незначительный выпуск обновят последний номер (3).

Проблема заключается в том, что выпуск развернут в Test, UAT или Stage в неподходящее время или случайно и останавливает наших тестировщиков. Например, QA находится в середине тестирования выпуска 2020.1.3 в Test. Разработчик случайно подталкивает 2020.2 к Тесту. Это включает в себя новый код QA не ожидал. В то время как QA находится в середине тестирования 2020.1.x, они хотят видеть только релизы 2020.1.x.

Мы не хотим использовать правила версии в наших каналах. Каждый раз, когда выпускается новый выпуск, правила версии должны будут обновляться.

Можно ли требовать одобрения, когда основная или вспомогательная версия развертывается в среде в первый раз?

1 Ответ

0 голосов
/ 18 февраля 2020

Да, это возможно. Для этого мы будем использовать выходные переменные и условия выполнения .

Сначала в начало процесса были добавлены два новых шага. Approval Steps in Deployment Process

Оба этапа пропускают разработку и производство, поскольку они не подвержены этой проблеме. Необходимость утверждать развертывание для разработчика каждый раз, когда основные / второстепенные изменения версии очень быстро устаревают. И все производственные выпуски должны быть не менее go для подготовки к началу.

На первом этапе выполняется этот сценарий PowerShell. Он сравнит предыдущий номер выпуска для этой указанной c среды с текущим номером выпуска. Для выходной переменной «requireApproval» будет установлено значение «истина», если основная или вспомогательная версия отличаются.

$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

Выходные переменные немного многословны и их сложно использовать. Чтобы сделать это проще, создайте переменную проекта для ссылки на нее. Output variable as project variable

На шаге ручного вмешательства установите условие выполнения для этой переменной проекта. Manual Intervention with Run Condition

Теперь пришло время проверить это. UAT в настоящее время имеет 2020.1.2, в то время как Test имеет 2020.2.3. Когда 2020.2.4 развернуто для проверки, ручное вмешательство не должно появляться. Current deployment versions

Успех, ручное вмешательство пропущено. Variable run condition skips steps during deployment

В настоящее время UAT имеет 2020.1.2. 2020.2.4 имеет новую минорную версию, развертывание в UAT предложит пользователю ручное вмешательство.
Run condition forces manual intervention

Это видео на YouTube показывает это в действии.

...