Может ли 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"]