Web.config для нескольких сред в конвейере TFS

У меня есть веб-проект, в котором развернуто более 50 серверов в соответствии с клиентом и регионом, каждая веб-конфигурация имеет более 600 значений, специфичных для каждого клиента и среды. означает, что WebConfig имеет более 600 тегов настроек приложений, и каждый клиент и среда имеют свои собственные значения. прямо сейчас это руководство, если какое-либо значение изменится, чем команда выпуска, отправится вручную на сервер и добавит/обновит значение в webconfig. Я хочу справиться с этим в

Конвейер выпуска tfs путем токенизации значений webconfig, но опять же непростая задача создать группы переменных каждого клиента, что создаст 50 групповых переменных, а каждая групповая переменная будет иметь 600 значений. 50 x 600 = 30 000

есть ли простой способ обновить значения webconfig во время каждого выпуска клиента в конвейере TFS

заранее спасибо


person Saad Awan    schedule 11.01.2021    source источник


Ответы (1)


Вы можете попробовать использовать FileTransform в конвейере выпуска для обновления значений webconfig.

Переменные, определенные в конвейерах сборки или выпуска, будут сопоставляться с записями «ключ» или «имя» в разделах appSettings, applicationSettings и connectionStrings любого файла конфигурации и parameters.xml. Подстановка переменных запускается после преобразования конфигурации.

Задача FileTransform сопоставит переменные конвейера с записями key или name в разделе appsettings. И обновите значение appsettings в webconfig с помощью соответствующих переменных конвейера.

Таким образом, вы можете определить переменную конвейера с тем же именем, что и записи key или name настройки приложения, которую необходимо изменить. При создании нового выпуска задача FileTransform изменит параметр приложения на значение переменной конвейера.

Вы также можете использовать задачу Magic Chunks для обновления настроек приложения webconfig.

Проверьте здесь, чтобы узнать, как преобразовать XML-файл с помощью волшебных патронов.

Пожалуйста, проверьте эту аналогичную тему для получения дополнительной информации.

Обновление:

Поскольку вручную создать все переменные очень сложно, вы можете попробовать использовать Variablegroups — для этого добавьте остальные API.

POST https://{instance}/{collection}/{project}/_apis/distributedtask/variablegroups?api-version=4.1-preview.1

Вам нужно написать сценарии, чтобы сначала прочитать все настройки приложений, а затем добавить все настройки приложений в остальное тело запроса API. См. пример ниже:

Например, у меня ниже настройки приложений в web.config.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings file="custom.config">
    <add key="ApplicationName" value="MyApplication" />
    <add key="ApplicationName2" value="MyApplication2" />
    <add key="ApplicationName3" value="MyApplication3" />
  </appSettings>
</configuration>

Сначала мне нужно написать скрипт, чтобы добавить все ключи и значения в тело запроса. Затем вызовите остальные API. См. пример ниже:

$body=@{
  "variables"= @{};
  "type"= "Vsts";
  "name"= "VariableGroup1";  #variable Group Name
  "description"= "A test variable group"
}

$appConfig = New-Object XML 

$appConfig.Load("path\to\web.config") 

$settigs = $appConfig.configuration.appsettings

foreach($setting in $settigs.add) {

  $body.variables[$setting.key]=@{value=$setting.value}

}
# Call rest api to create variable group

$url = "https://{instance}/{collection}/{project}/_apis/distributedtask/variablegroups?api-version=4.1-preview.1"
$PAT="Personal access token"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PAT)"))

$bodyjson = $body | convertto-json

$pipeline1 = Invoke-RestMethod -Uri $url -Headers @{authorization = "Basic $base64AuthInfo"} -Method post -ContentType "application/json" -Body $bodyjson

При использовании скриптов вам не нужно создавать группу переменных вручную.

person Levi Lu-MSFT    schedule 12.01.2021
comment
Я думаю, что есть некоторая путаница, чтобы понять мою ситуацию, как упоминалось в вопросе, что я уже использую расширение «Заменить токены» для этого. каждая среда), как уже говорилось, непростая задача создать значения 50 * 600 = 30000, есть некоторые другие вещи, которые будут творить магию - person Saad Awan; 12.01.2021
comment
@SaadAwan Я не могу придумать простого способа добиться этого. На самом деле вам не нужно предварительно создавать все переменные в конвейере. Вам просто нужно создать новые переменные, которые необходимо изменить в настройках приложения. Если вам нужно создать все переменные одновременно. Вы можете использовать опцию Variable group Clone. Вы можете сначала создать группу переменных с 600 переменными, а затем клонировать эту группу переменных в 50 групп переменных. - person Levi Lu-MSFT; 12.01.2021
comment
Поскольку я использую TFS 2018, параметр CLONE недоступен в группе переменных. - person Saad Awan; 12.01.2021
comment
@SaadAwan Я думаю, вы можете попробовать использовать rest API, чтобы создать группу переменных со всеми настройками приложений. См. обновление выше. - person Levi Lu-MSFT; 13.01.2021