Выходные переменные в Octopus -Неправильно передавая нулевое значение - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу передать значение в Octopus от одного шага к другому проекта через выходную переменную, значение «VM running» или «VM освобождается». Есть два сервера, один сервер не работает, другой работает, поэтому значения должны быть переданы соответственно. Теперь, когда я использую точный синтаксис выходной переменной, он передает значение Null на следующий шаг.

Проект развертывания Octopus Шаг 1:

$RG = $RGName
$VM = "#{StepTemplate_VMName}"
$WarningPreference = 'SilentlyContinue'
$VMStats = (Get-AzureRmVM -Name $VM -ResourceGroupName $RG -Status).Statuses
$stats = ($VMStats | Where Code -Like 'PowerState/*')[0].DisplayStatus

Set-OctopusVariable -name "RunStatus" -value $stats
write-host $stats     #value can either be "VM running" or "VM deallocated"

Проект развертывания Octopus Шаг 2:

$VM = "#{StepTemplate_VMName}"
$Runstatus = $OctopusParameters["Octopus.Action[Step1].Output[$VM].RunStatus"]
write-host $Runstatus

Если я не использую [$ VM] в коде шага 2, это дает только 1 значение для обеих машин в качестве «ВМ работает» Согласно синтаксису, приведенному на веб-сайте Octopus, мы должны использовать ВМ имя для передачи специфицируемой машины c различные значения. поэтому я использовал [$ VM], но он дает нулевые значения обоим компьютерам

Редактировать: Событие Если я жестко закодирую значение $ VM для любого VMName, он все равно дает мне ноль.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Действительно ли шаг, который создает выходную переменную, выполняется на сервере, который не работает? Когда выходная переменная создается на шаге, который выполняется на нескольких машинах, для этой переменной будет создано несколько значений в области машин. Когда последующий шаг выполняется на тех же компьютерах, Octopus выберет правильное значение в зависимости от этой области. Так что, может быть, немного не так topi c, но если оба шага выполняются для обеих целей, указание области действия $VM является избыточным и необходимо только в том случае, если вы хотите получить значение другой машины.

Поскольку жесткое кодирование имя цели здесь возвращает ноль, похоже, что шаг создания выходной переменной не был выполнен на этой цели. Я бы предложил отладить это, создав в вашем проекте переменную с именем OctopusPrintEvaluatedVariables со значением True. Это увеличит детализацию журнала задач и позволит регистрировать, как оцениваются все переменные на каждом этапе развертывания.

0 голосов
/ 28 апреля 2020

Исходя из того, что я делаю в Octopus, оно должно быть:

$Runstatus = $OctopusParameters["Octopus.Action[Step1].Output.RunStatus"]

Даже этот формат указывается в справочной документации. https://octopus.com/docs/projects/variables/output-variables

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