Может ли Octopus Deploy иметь переменные в переменных

Это системная переменная Octopus Deploy:

#{Octopus.Action[Deploy To Server].Output.Package.InstallationDirectoryPath}

Текст "Развертывание на сервер" - это имя шага в моем проекте, который развертывает пакет Nuget на сервере. Эта переменная дает место установки NugetPackage.

Мне интересно, могу ли я сделать это более общим:

#{Octopus.Action[#{DeploymentStep}].Output.Package.InstallationDirectoryPath}

# {DeploymentStep} сам по себе является переменной со значением "Deploy to Server"?

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

(Я хочу сделать это, чтобы сделать это значение по умолчанию для шаблона шага.)

1 ответ

Решение

Это можно сделать; но вам нужно использовать немного другой синтаксис!

Синтаксис подстановки переменных: http://docs.octopusdeploy.com/display/OD/Variable+Substitution+Syntax

$deploymentStep = "#{DeploymentStep}"

$installationDirectory = $OctopusParameters["Octopus.Action[$deploymentStep].Output.Package.InstallationDirectoryPath"]

У меня была такая же проблема, но с помощью нескольких тестов я заставил ее работать в 1 лайнере. Вам нужно заключить внутреннюю переменную в скобки с долларом, и вам нужно изменить двойные кавычки внутри переменных на одинарные, чтобы он не жаловался на несоответствие кавычек. Двойные кавычки снаружи и одинарные кавычки внутри.

В приведенном ниже примере получается имя шага с переменной осьминога, а также имя машины, на которой он запускал переменную для получения результата:

$OctopusParameters["Octopus.Action[$($OctopusParameters['Octopus.Step.Name'])].Output[$($OctopusParameters['Octopus.Machine.Name'])].MyVarFromMachineFromStep"]
Другие вопросы по тегам