Azure项目Kudu接受上传的zip文件到Zipdeploy端点但不部署

时间:2018-04-22 16:09:08

标签: powershell azure bamboo kudu azure-app-service-envrmnt

我有一个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),但我不知道这是否与我所看到的问题有关。

有什么想法吗?

1 个答案:

答案 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了解相关信息。