Измените все файлы конфигурации Web. *. На первом этапе в конвейере выпуска - PullRequest
1 голос
/ 04 марта 2020

Мне нужно изменить элементы внутри appsettings во всех файлах конфигурации. *. Web на первом этапе. То есть я не могу выполнять трансформацию на каждом этапе в конвейере релиза. Причина в том, что я использую Episerver DXC / DXP.

У меня 4 этапа; «Загрузить пакет», «Интеграция», «Подготовка производства» и «Производство» .

Значения сохраняются в i Azure Key Vault.

Есть ли какой-нибудь умный способ сделать это?

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Читали ли вы руководство о преобразованиях конфигурации для DX C? https://world.episerver.com/digital-experience-cloud-service/development-considerations/environment-configurations/

0 голосов
/ 19 марта 2020

Я пытался заменить переменные в конфигурационных файлах из Azure Key Vault перед преобразованием в конфигурационные файлы, потому что это невозможно сделать (на данный момент) во время конвейера выпуска при использовании Episerver DX C. Вместо этого я заменил их во время конвейера сборки.

Произвел подстановку переменных в Powershell во время конвейера сборки. Импортируйте секреты хранилища ключей как отдельную задачу перед задачей Powershell, перечислите все, что я бы использовал в качестве переменных среды в задаче Powershell.

Переменные среды, которые я назвал, совпадают с теми, которые следует заменить в конфигурации. файлы (например, SomeApiKey_Integration ). Go в файлах конфигурации найдите два любых символа между двумя двойными подчеркиваниями и замените их значением из переменной среды ((переменная Get-ChildItem $). Значение).

В файлах конфигурации и переменной среды они названы как указано ранее, SomeApiKey_Integration . Имя ключа хранилища и значение переменной среды как SomeApiKey-Integration.

0 голосов
/ 05 марта 2020

Если File transformation не подходит для вашего проекта, как насчет использования сценария powershell для изменения элемента?

Пример:

Вот мой пример web.product.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="service.tasks" type="HRNetTaskService.TaskConfigurationSection, TaskService" />
  </configSections>
  <connectionStrings>
    <add name="Production" connectionString="xxxx" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="RestServiceUrl" value="https://sample.net" />   
  </appSettings> 
</configuration>

Теперь я хочу обновить connectionString из .config файл. Добавьте replace.ps1 в репозитории с помощью приведенных ниже сценариев, а затем вызовите этот файл replace.ps1 в задаче Powershell, передав соответствующее значение динамического c:

Param(
[string]$source,
[string]$connectionstring
)
$webConfig = $source
$doc = (Get-Content $webConfig) -as [Xml]
$root = $doc.get_DocumentElement();
$activeConnection = $root.connectionStrings.SelectNodes("add");
$activeConnection.SetAttribute("connectionString", $connectionstring);
$doc.Save($webConfig)

enter image description here


Здесь $(ProductValue) - это переменная, настроенная вами в Azure хранилище ключей. Его путь вызова такой же, как и для переменной конвейера. Просто вам нужно ссылка хранилище ключей Azure в azure devops, а затем объединить его с Variable group.

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