azure-devops - 将文件直接上传到不属于部署的 Azure 应用服务
问题描述
我有一种情况,我们重写了一个网站并将其部署到 Azure AppService 并且一切都按预期工作。我正在使用 Azure CDN 获取从站点链接中提取的相关参考 pdf 文件,一切都很好。
我遇到的问题是 pfd 文件的创建者硬编码链接到 pdf 文件中的其他文档。这些链接指向本地站点文件夹,例如,文档中将有一个链接指向此端点 https://mysite/download/filename.pdf 上的另一个文档。
我需要做的是在 Azure AppService 上创建这些文件的副本,直到可以重写这些文件,以便可以继续访问它们,就好像它们在旧服务器的原始本地站点文件夹中一样。
我希望我不必将这些作为部署的一部分包括在内,因为它有超过 300mbs 的文件。我知道有一种 FTP 方法,但它不会在站点根目录上创建任何新文件夹或文件。我已经尝试过使用filezilla。我还通过浏览器使用了 Powershell,它允许我创建文件夹和文件上传,但它们无法通过预期的主机名/下载/文件名访问。当我导航到所有 dll 都使用 PowerShell 的位置时,我不允许在那里创建一个文件夹,这是我认为真正的站点根目录。有人知道我缺少什么吗?
更新:我忘了提到我们正在通过 Azure DevOps 使用 CI/CD 进行部署。
解决方案
将文件直接上传到不属于部署的 Azure 应用服务
您可以尝试在发布管道中将 Kudu api 与 azure powershell 任务一起使用并运行 kudu api:
$WebApp = Get-AzWebApp -Name '<appname>' -ResourceGroupName '<resourcegroupname>'
[xml]$publishingProfile = Get-AzWebAppPublishingProfile -WebApp $WebApp
# Create Base64 authorization header
$username = $publishingProfile.publishData.publishProfile[0].userName
$password = $publishingProfile.publishData.publishProfile[0].userPWD
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$bodyToPOST = @{
command = "md components"
dir = "D:\home\site"
}
# Splat all parameters together in $param
$param = @{
# command REST API url
Uri = "https://<appname>.scm.azurewebsites.net/api/command"
Headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
UserAgent = "powershell/1.0"
Method = "POST"
Body = (ConvertTo-Json $bodyToPOST)
ContentType = "application/json"
}
# Invoke REST call
Invoke-RestMethod @param
然后使用 kudu api 部署您的应用程序:
$param = @{
# zipdeploy api url
Uri = "https://<appname>.scm.azurewebsites.net/api/zip/site/components"
Headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
UserAgent = "powershell/1.0"
Method = "PUT"
# Deployment Artifact Path
InFile = "$(System.DefaultWorkingDirectory)\<artifacts_alias>\drop\<artifacts_name>.zip"
ContentType = "multipart/form-data"
}
# Invoke REST call
Invoke-RestMethod @param
您可以查看文档使用 Kudu REST API 部署到 Azure(平台即服务)网站以了解更多详细信息。
FTP没有在站点根目录创建新的文件夹或文件的原因应该是上传的文件任务要上传到root用户拥有,默认只能由root写入。如果其他用户需要上传文件,权限受限,无法操作。
推荐阅读
- anaconda - 无法使用模块 pdftotext 构建独立的 .exe
- reactjs - 为什么 webpack 将所有文件都导入子目录而不是右边
- javascript - 有没有办法模拟“ipfs add
" 使用 javascript 获取? - c++ - Cocos2d-x 4.0 Lens3D 和 Waves3D 动画
- python - 在 HTML 模板中一次显示来自不同表单的多个烧瓶变量
- python - 使用 pandas 按时间顺序“dd.mm.yyyy”放置数据框
- azure - 哪些 Azure SQL 产品允许我部署 SSIS 包?
- python - 如何从数据框的每个类别中迭代和采样?
- java - 如何在 onComplete 中添加 TOAST 消息,我是 Android Studio 的初学者,我对 java 不太了解
- javascript - 如何让 puppeteer 使用 Firebase 函数?