2014-01-22 2 views
5

Мы тестируем Octopus Deploy, поэтому мы создали образец файла web.config, который мы установили и преобразовали в разных средах. Преобразование web.config и использование пользовательской переменной работают нормально, но я не могу заменить встроенные переменные Octopus. Вот пример из раздела XML в web.config:Как указать встроенные имена переменных Octopus в файле конфигурации XML?

<appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    <add key="environmentTransform" value="" /> 
    <add key="EnvironmentVariable1" value="$OctopusEnvironmentName" /> 
    <add key="EnvironmentVariable2" value="$(OctopusEnvironmentName)" /> 
    <add key="EnvironmentVariable3" value="$(Octopus.Environment.Name)" /> 
    <add key="EnvironmentVariable4" value="$Octopus.Environment.Name)" /> 
    <add key="EnvironmentVariable5" value="$OctopusParameters[&quot;Octopus.Environment.Name&quot;]" /> 
    <add key="MachineVariable1" value="$Octopus.Machine.Name" /> 
    <add key="MachineVariable2" value="#(Octopus.Machine.Name)" /> 
    <add key="MachineVariable3" value="#OctopusMachineName" /> 
    <add key="CustomVariable" value="CustomVariable" /> 
    </appSettings> 

И вот web.Dev.config, названный в честь среды:

<appSettings> 
    <add key="environmentTransform" value="Dev" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/> 
    </appSettings> 

И вот результат:

<appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    <add key="environmentTransform" value="Dev" /> 
    <add key="EnvironmentVariable1" value="$OctopusEnvironmentName" /> 
    <add key="EnvironmentVariable2" value="$(OctopusEnvironmentName)" /> 
    <add key="EnvironmentVariable3" value="$(Octopus.Environment.Name)" /> 
    <add key="EnvironmentVariable4" value="$Octopus.Environment.Name)" /> 
    <add key="EnvironmentVariable5" value="$OctopusParameters[&quot;Octopus.Environment.Name&quot;]" /> 
    <add key="MachineVariable1" value="$Octopus.Machine.Name" /> 
    <add key="MachineVariable2" value="#(Octopus.Machine.Name)" /> 
    <add key="MachineVariable3" value="#OctopusMachineName" /> 
    <add key="CustomVariable" value="Value for maeaint01" /> 
    </appSettings> 

Как видите, переменные Octopus не заменяются. Любая идея почему?

ответ

7

Подстановка переменной файла конфигурации Octopus работает только с настройкой key, а не значением. Если вы создаете параметр, как:

<add key="Octopus.Environment.Name" value="..." />

то value будет установлено во время развертывания.

Что вы пытаетесь использовать с другими подходами, конечно, конечно, но не так, как Octopus в настоящее время работает с конфигурационными файлами.

Мы улучшили нашу обработку переменной подстановки в 2.0 с новым анализатором и новыми возможностями (#{if ..., #{each и так далее) - ваш вопрос вдохновил меня осадку до this proposal, которые могли бы решать это использование лучше.

+0

Спасибо за ответ. Теперь я понимаю. Хотя это, безусловно, работает, я считаю, что возможность заменить атрибут «значение» (фактически - любой) более гибким, поэтому было бы здорово, если бы оно могло быть реализовано. Использование имени переменной Octopus в атрибуте «ключ» перетаскивает имена переменных Octopus в исходном коде, и я бы предпочел избежать этого. –

+0

Спасибо - предложение @Declan McNulty ниже показывает, как вы можете использовать переменную Octopus с пользовательской. (+1 Declan :)) –

+0

Да, именно так мы решили сделать это в настоящее время. Благодаря! –

2

Я обнаружил, что мои файлы .config не собирали встроенные переменные или пользовательских переменных.

Что вы можете сделать, это установить переменную в осьминога приборной панели под названием EnvironmentVariable1 и установить его значение, чтобы быть

#{OctopusEnvironmentName} 

Это будет затем преобразовать узел EnvironmentVariable1 в вашей конфигурации, чтобы быть имя окружения, которую вы в настоящее время развертывается к.

+0

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

+0

Могли ли вы заставить свои пользовательские переменные работать непосредственно в web.config? –

+0

Ну, они находятся в web.config. Другие переменные работают, но не встроены в Octopus. –

Смежные вопросы