我有一个ASP.NET Core 2.0 API作为Azure应用服务,我已经使用了几个月的QA部署插槽。我在VS2017中开发,并使用项目的内置发布到Azure应用服务组件发布到Azure。这工作得很好。
我现在正尝试将部署移至Bamboo部署服务器。
我通常会按照与此链接how to use azure kudu zipdeploy from a bamboo deployment server
类似的流程执行操作在我的Bamboo版本中,我运行一个Powershell脚本来调用dotnet publish将发布文件放在一个输出文件夹中,然后我将这些文件压缩成一个zip文件并将其用作工件。然后,在我的Bamboo部署项目中,我引用该工件并运行一个Powershell脚本,该脚本使用Invoke-WebRequest调用Kudu端点,如下所示;
Invoke-WebRequest -Uri "https://userName:userPassword@MySiteDeploymentSlot.scm.azurewebsites.net/api/zipdeploy" `
-InFile zipfileName -ContentType "multipart/form-data" -Method Post -UseBasicParsing
Username和UserPassword是我从Azure门户中的部署槽的发布配置文件获得的,ZipFileName是工件中的zip文件,是我项目的压缩发布输出。
注意:我现在正在使用Kudu URL中的实际值,只是为了让进程正常工作,而不会在将Powershell作为参数传递给其他人在使用Powershell时报告的用户名和密码属性时返回勾选的问题这个过程。
当脚本运行时,我得到以下内容
StatusCode : 200
StatusDescription : OK
Content :
<!DOCTYPE html>
<html dir="ltr" class="" lang="en">
<head>
<title>Sign in to your account</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-eq...
RawContent : HTTP/1.1 200 OK
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
x-ms-request-id: 31607f18-c30a-46f3-bdaf-d84a...
Forms :
Headers : {[Pragma, no-cache], [Strict-Transport-Security, max-age=31536000; includeSubDomains],
[X-Content-Type-Options, nosniff], [X-Frame-Options, DENY]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml :
RawContentLength : 34599
由于我获得了状态代码200,我认为已经上传了,但是当我查看Kudu部署端点时,它并没有出现在部署列表中。
我的理解是您只需将一个zip文件上传到Kudu zipdeploy端点,它就会部署到指定的Azure部署插槽。但是,当我查看Kudo网站的文件日期时,它们都表明我一周前在VS2017上发布的最后一次发布。
显然,我在这里遗漏了一些东西。
ZipDeploy返回的响应,即使状态为200,也有文本&#34;登录到您的帐户&#34;在Head部分,Title属性。我也看到DENY这个词(X-Frame-Options:DENY),但我不知道这是否与我所看到的问题有关。
有什么想法吗?
答案 0 :(得分:1)
我认为问题是Invoke-WebRequest
不尊重在URL中传递的信用卡。相反,您需要显式传递基本身份验证标头。
尝试这样的事情:
$webapp = "MyApp"
$username = "`$MyApp"
$password = "ThePasswordFromPublishProfile"
# Note that the $username here should look like `SomeUserName`, and **not** `SomeSite\SomeUserName`
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$apiUrl = "https://$webapp.scm.azurewebsites.net/api/zipdeploy"
$filePath = "C:\Temp\books.zip"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST -InFile $filePath -ContentType "multipart/form-data"
另请参阅here了解相关信息。