我在Azure中托管了一个Web应用程序,并且某些文件位于wwwroot
文件夹中。我在wwwroot
之外还有其他人,实际上在同一级别的名为components
的目录中。
到目前为止,我一直在使用Kudu控制台手动更新文件,将ZIP文件放入components
中。我已经开始将流程转移到Azure Pipelines;我设法配置了一个构建管道,该管道可以自动生成并压缩要放入components
的文件/工件。
现在,我正在尝试配置发布管道,以将文件从内部版本部署到components
。问题是我无法从默认位置或从市场中找到任务,该任务使我可以将目标路径配置为components
;它们默认都针对wwwroot
进行部署。
是否有某种任务或脚本可以实现这一目标?
这是我第一次使用Azure Pipelines面对CI / CD的设置,也许我正在忽略某些东西。
答案 0 :(得分:2)
您可以使用调用Kudu api的脚本来实现。您需要在发布管道中添加azure powershell任务并运行kudu api。例如下面的脚本。
1,用于创建目录组件的脚本
$WebApp = Get-AzWebApp -Name '<appname>' -ResourceGroupName '<resourcegroupname>'
[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 = "md components"
dir = "D:\home\site"
}
# Splat all parameters together in $param
$param = @{
# command REST API url
Uri = "https://<appname>.scm.azurewebsites.net/api/command"
Headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
UserAgent = "powershell/1.0"
Method = "POST"
Body = (ConvertTo-Json $bodyToPOST)
ContentType = "application/json"
}
# Invoke REST call
Invoke-RestMethod @param
以上脚本将首先从您应用的publishprofile中获取用户名和密码,稍后将在调用kudu api时使用它们。 api将运行您自定义的命令以在"d:\home\site"
中创建目录组件
2,使用Kudu api部署您的应用。
在创建组件目录后,您可以调用kudu api将您的应用部署到组件目录。请参考以下示例。
$param = @{
# zipdeploy api url
Uri = "https://<appname>.scm.azurewebsites.net/api/zip/site/components"
Headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
UserAgent = "powershell/1.0"
Method = "PUT"
# Deployment Artifact Path
InFile = "$(System.DefaultWorkingDirectory)\<artifacts_alias>\drop\<artifacts_name>.zip"
ContentType = "multipart/form-data"
}
# Invoke REST call
Invoke-RestMethod @param
值 InFile 应该指向发布管道下载的工件文件的位置。通常位于"$(System.DefaultWorkingDirectory)\<artifacts_alias>\drop\<artifacts_name>.zip"
有关Kudu Api的更多信息,您可以参考此blog。