我有一个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),但我不知道这是否与我看到的问题有关。
有什么想法吗?
1条答案
按热度按时间oipij1gg1#
我想问题是
Invoke-WebRequest
不尊重url中传递的凭据。相反,您需要显式地传递基本auth头。尝试以下操作:
相关信息请参见此处。