azure应用程序服务部署任务选项,用于在部署时删除容器中的文件

mklgxw1f  于 2021-06-21  发布在  Kudu
关注(0)|答案(1)|浏览(448)

我正在使用linux上的web应用服务和devops发布管道部署pythonweb应用。我正在使用的管道任务称为 AzureRmWebAppDeployment@4 .
在部署之间,容器中的文件不会被删除,这会导致问题。
我注意到我是否正在使用不同类型的应用程序服务(即windows上的web应用程序),以及部署方法是否设置为 Web Deploy 选择 Remove additional files at destination 存在(参见屏幕截图)。但是我们使用的是 Zip Deploy 方法,并希望使用linux服务。如果没有应用程序服务和部署方法的组合,我将无法使用此选项。

有人能建议一种在部署时删除容器内容的替代方法吗?另外,您是否了解为什么在使用zip部署和linux时,此选项不能通过管道任务使用?
提前感谢您的帮助。

5gfr0r5j

5gfr0r5j1#

可以使用kudu命令api清除webapp服务器上的wwwroot文件夹。kudu命令restapi将执行 command 在服务器上的指定目录中。

{
    command = "find . -mindepth 1 -delete"  
    dir = "/home/site/wwwroot
}

在azure应用程序服务部署任务之前添加azure powershell任务,并在内联脚本下运行。

$ResGroupName = ""
$WebAppName = ""

# Get publishing profile for web application

$WebApp = Get-AzWebApp -Name $WebAppName -ResourceGroupName $ResGroupName
[xml]$publishingProfile = Get-AzWebAppPublishingProfile -WebApp $WebApp

# 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)))

$bodyToPOST = @{  
                  command = "find . -mindepth 1 -delete"  
                  dir = "/home/site/wwwroot"  
}  

# Splat all parameters together in $param

$param = @{  
            # command REST API url  
            Uri = "https://$WebAppName.scm.azurewebsites.net/api/command"  
            Headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}  
            Method = "POST"  
            Body = (ConvertTo-Json $bodyToPOST)  
            ContentType = "application/json"  
}  

# Invoke REST call

Invoke-RestMethod @param

以上脚本将清空文件夹 /home/site/wwwroot 每次部署前。
如果需要删除应用服务器上的特定文件,可以使用kudu delete rest api:

DELETE /api/vfs/{path}
Delete the file at path.

有关更多示例,请查看此处。

相关问题