0

我正在运行 Azure devops,我有一个管道和一个版本(在自托管代理上运行),并且该版本设置为发送到一个 azure 应用程序服务。部署工作正常,唯一的问题是我还希望能够(基于我的一些发布变量)在站点的 web.config 已经部署到 azure 网站之后对其进行编辑。

我正在使用 Azure Powershell 任务(https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-powershell?view=azure-devops),但我找不到发布变量 ( https://docs.microsoft.com/en-us/azure/devops/pipelines/release/variables?view=azure-devops&tabs=batch ) 中显示站点所在目录的任何位置。浏览 Kudu,它非常基本,例如 d:\home\site\wwwroot\ ,但使用它根本不起作用。

我正在寻找的这个帖子配置是不是真的不可能,还是我应该以不同的方式接近它?

4

1 回答 1

1

我认为您可以使用 powershell 任务调用 Kudu api 来获取部署的 web.config 并在发布管道中使用Magic Chunks 任务或文件转换任务对其进行编辑。然后使用 Kudu api 再次将更改后的 web.config 上传到 azure 网站。

1,下面的脚本展示了如何从 azure 网站获取 web.config。

$srcResGroupName = "Test"
$srcWebAppName = "tstest12"
$outwebconfig="$(System.DefaultWorkingDirectory)\tempfolder\web.config"

# Get publishing profile for SOURCE application
$srcWebApp = Get-AzWebApp -Name $srcWebAppName -ResourceGroupName $srcResGroupName
[xml]$publishingProfile = Get-AzWebAppPublishingProfile -WebApp $srcWebApp
# Create Base64 authorization header
$username = $publishingProfile.publishData.publishProfile[0].userName
$password = $publishingProfile.publishData.publishProfile[0].userPWD

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

$apiBaseUrl = "https://$($srcWebApp.Name).scm.azurewebsites.net/api/vfs/site/wwwroot/web.config"

# Download the web.config file to $outwebconfig

Invoke-RestMethod -Uri "$apiBaseUrl" `
                    -Headers @{UserAgent="powershell/1.0"; `
                     Authorization=("Basic {0}" -f $base64AuthInfo)} `
                    -Method GET `
                    -OutFile $outwebconfig

上面的脚本将从 azure 网站下载 web.config 并将其保存到 $(System.DefaultWorkingDirectory)\tempfolder\web.config,您可以稍后在其中使用转换任务对其进行编辑。

以上脚本通过脚本获取用户名和密码,您还可以通过转到应用服务上的概述刀片,单击刀片顶部的...更多,然后单击获取发布配置文件,在发布配置文件中获取它们

2,然后你可以添加一个配置转换任务来改变你的web.config。

3、最后添加一个powershell任务将修改后的web.config上传到azure网站

$srcResGroupName = "Test"
$srcWebAppName = "tstest12"
$webconfig="$(System.DefaultWorkingDirectory)\tempfolder\web.config"

# Get publishing profile for SOURCE application
$srcWebApp = Get-AzWebApp -Name $srcWebAppName -ResourceGroupName $srcResGroupName
[xml]$publishingProfile = Get-AzWebAppPublishingProfile -WebApp $srcWebApp
# Create Base64 authorization header
$username = $publishingProfile.publishData.publishProfile[0].userName
$password = $publishingProfile.publishData.publishProfile[0].userPWD

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

 $apiUrl = "https://$($srcWebApp.Name).scm.azurewebsites.net/api/vfs/site/wwwroot/web.config";

Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method PUT -InFile $webconfig -ContentType "application/xml";

有关 Kudu api 的更多用法,您可以在此处查看

于 2019-12-13T02:50:06.043 回答