Конвейер релиза Azure DevOps Web.Config Править - PullRequest
0 голосов
/ 03 октября 2019

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

Но во время конвейера выпуска я хотел бы обновить другой раздел web.config, в частности, узел поставщика sessionState. Я пробовал несколько плагинов для конвейера выпуска, таких как Config Transform от Magic Chunks, но проблема в том, что вам нужно указать путь к файлу конфигурации для редактирования, но к тому времени, когда он попадает в конвейер выпуска, исходные файлы находятся впочтовый архивКаким-то образом обычные преобразования appSettings могут работать с разархивированной версией, но я не могу заставить другие преобразования произойти после распаковки файла.

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

Кто-нибудь знает способ внести изменения в файл web.config вне группировки appSettings в конвейере выпуска для службы приложений Azure?

1 Ответ

1 голос
/ 03 октября 2019

Вы можете использовать PowerShell для преобразования внутри файла zip.

Например, у меня есть этот узел в web.config:

<configuration>
  <sessionstate 
      mode="__mode__"
      cookieless="false" 
      timeout="20" 
      sqlconnectionstring="data source=127.0.0.1;user id=<user id>;password=<password>"
      server="127.0.0.1" 
      port="42424" 
  />
</configuration>

Я использую этот скрипт:

# cd to the agent artifcats direcory (where the zip file exist)
cd $env:Agent_ReleaseDirectory
$fileToEdit = "web.config"

[Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem");
# Open zip and find the particular file (assumes only one inside the Zip file)
$zipfileName = dir -filter '*.zip'
$zip =  [System.IO.Compression.ZipFile]::Open($zipfileName.FullName,"Update")

$configFile = $zip.Entries.Where({$_.name -like $fileToEdit})

# Read the contents of the file
$desiredFile = [System.IO.StreamReader]($configFile).Open()
$text = $desiredFile.ReadToEnd()
$desiredFile.Close()
$desiredFile.Dispose()
$text = $text -replace  '__mode__',"stateserver"
#update file with new content
$desiredFile = [System.IO.StreamWriter]($configFile).Open()
$desiredFile.BaseStream.SetLength(0)

# Insert the $text to the file and close
$desiredFile.Write($text)
$desiredFile.Flush()
$desiredFile.Close()

# Write the changes and close the zip file
$zip.Dispose()

До:

enter image description here

После (внутри архива, без распаковки и повторного архивирования):

enter image description here

...