azure项目kudu接受上传到zipdeploy端点的zip文件,但不进行部署

ej83mcc0  于 2021-06-20  发布在  Kudu
关注(0)|答案(1)|浏览(424)

我有一个asp.net core 2.0 api作为一个azure应用程序服务,它有一个qa部署槽,我已经使用了几个月。我在vs2017中开发,并使用项目的内置发布到azure应用程序服务组件发布到azure。这很管用。
我现在正在尝试将部署移动到一个部署服务器。
我通常遵循一个类似于以下链接的过程:如何从部署服务器使用azurekuduzipdeploy
在我的bamboo构建中,我运行一个powershell脚本调用dotnet publish,将发布文件放在一个输出文件夹中,然后将这些文件压缩到一个zip文件中,并将其用作工件。然后,在我的bamboo部署项目中,我引用该工件并运行powershell脚本,该脚本使用invokewebrequest调用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,但在标题部分title属性中有文本“登录到您的帐户”。我也看到了deny这个词(x-frame-options:deny),但我不知道这是否与我看到的问题有关。
有什么想法吗?

oipij1gg

oipij1gg1#

我想问题是 Invoke-WebRequest 不尊重url中传递的凭据。相反,您需要显式地传递基本auth头。
尝试以下操作:

$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"

相关信息请参见此处。

相关问题