我正在尝试使用PowerShell从Bamboo部署服务器脚本任务中找到一种将应用服务更新部署到Azure应用服务的方法。
我遇到了身份验证部分的问题。
注意:感谢https://markheath.net/post/deploy-azure-webapp-kudu-zip-api的脚本创意。
以下是我的PowerShell脚本。
$PublishingUsername = ["The value of the userName property name in the Azure PublishSettings file"]
$PublishingPassword = ["The value of the userPWD property name in the Azure PublishSettings file"]
$SlotName = ["The name of the slot. I.e. qa"]
$WebAppName = ["The name of the app service in Azure"]
$LocalPath = ["The location of zip file that holds the VS2017 Publish Output files"]
function Upload-ZipDeploy() {
$pair = "$($PublishingUsername):$($PublishingPassword)"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$basicAuthValue = "Basic $encodedCreds"
$Headers = @{
Authorization = $basicAuthValue
}
if ($SlotName -eq ""){
$kuduApiUrl = "https://$WebAppName.scm.azurewebsites.net/api/zipdeploy"
}
else{
$kuduApiUrl = "https://$WebAppName`-$SlotName.scm.azurewebsites.net/api/zipdeploy"
}
# use kudu deploy from zip file
Invoke-WebRequest -Uri $kuduApiUrl -Headers $Headers `
-InFile $LocalPath -ContentType "multipart/form-data" -Method Post
}
Upload-ZipDeploy
当我运行此脚本时,我得到了
Invoke-WebRequest : Server Error
401 - Unauthorized: Access is denied due to invalid credentials.
You do not have permission to view this directory or page using the
credentials that you supplied.
我正在使用我为Azure中的应用服务部署插槽设置下载的* .PublishSettings文件中的userName和userPWD值。我可以在VS2017的发布向导中导入同样的* .PublishSettings文件,并成功发布到该插槽。我似乎无法在PowerShell中做到这一点。
我在这里缺少什么?
答案 0 :(得分:3)
这里的解决方案非常简单。我使用的是来自publishSettings文件的Microsoft生成的用户名,该用户名以$开头。因此,PowerShell正在剥离$和第一个字符。我用后缀勾选了用户名,这阻止了用户名被剥离。它现在正常工作。
我还在azurewebsites.net域之后添加了:443,因为它出现在publishSettings文件中,但我不确定它实际上是否需要,因为url以https://已经开始。