我知道,当在Azure DevOps中创建发布管道时,可以使用管道中的变量来更新应用程序的web.config,并且适用于所有appSettings值。
但是,在发布管道中,我想更新web.config的其他部分,特别是sessionState
提供者节点。我已经尝试了一些发布管道的插件,例如Magic Chunks的Config Transform,但问题是它需要您指定要编辑的配置文件的路径,但是到发布管道时,源文件才位于zip存档。在某种程度上,appSettings的常规转换可以在未压缩的版本上正常工作,但是在文件解压缩后我无法进行其他转换。
我知道您可以在构建管道中进行更改,但是出于某些原因,我们希望在发布管道中进行更改。
有人知道在Azure应用服务的发布管道中的appSettings分组之外对web.config进行更改的方法吗?
答案 0 :(得分:1)
您可以使用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()
之前:
之后(在zip文件中,无需解压缩和重新压缩):
答案 1 :(得分:1)
我当时想做类似的事情,但是发现有一个内置任务,称为Microsoft的文件转换[https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/file-transform?view=azure-devops]。有了它,您只需要做的就是在web.config中用键定义变量,如果它是简单的替代方法。如果您需要更多的转换,也可以指定。