如何使用azuredevops发布管道在azureweb应用的wwwroot目录外部署文件

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

我有一个web应用程序托管在azure中,一些文件在 wwwroot 文件夹。我在外面还有其他人 wwwroot ,实际上在一个名为 components 在同一级别。
到目前为止,我一直在使用kudu控制台手动更新这些文件,并在其中放置了一个zip文件 components . 我已经开始将我的流程转移到azure管道;我成功地配置了一个构建管道,它自动生成并压缩要放入的文件/工件 components .
现在我正在尝试配置发布管道,以便将文件从构建部署到 components . 问题是我无法找到一个任务,默认的或从市场上,允许我配置目标路径为 components ; 它们都是针对 wwwroot 默认情况下。
有什么样的任务或脚本来实现这一点吗?
这是我第一次面对用azure管道设置ci/cd,也许我忽略了什么。

eoigrqb6

eoigrqb61#

您可以使用调用kuduapi的脚本来实现这一点。您需要在发布管道中添加一个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中获取用户名和密码,这将在以后调用kuduapi时用作说明。api将运行您自己定义的命令来生成目录组件 "d:\home\site"
2.使用kudu api部署应用程序。
创建组件目录时,可以调用kuduapi将应用程序部署到组件目录。请参考下面的例子。

$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" 有关kuduapi的更多信息,请参阅此博客。

相关问题