azure-devops - 如何使用 Azure 管道发布 Web 应用程序?
问题描述
在 Visual Studio (2019) 中,我可以构建我的应用程序并在本地发布它。然后我可以手动将文件复制到我的服务器,一切都很好。
这是使用 Azure Pipeline 方法的文件列表 :(
我对 C# Asp.Net-Mvc Core 2.2 很感兴趣,我很快就会迁移到 3.1,但我想在继续之前解决这个问题。
我正在尝试设置 Azure 管道,因为我使用 VSTS-GIT 进行源代码控制。我的 YAML 文件如下。
我的手动过程是
- 在 Visual Studio (2019) 中构建应用程序
- 在我的机器上发布本地文件夹的应用程序
- 压缩文件夹
- 将压缩包复制到 ftp 站点
- 在ftp上解压文件
该网站然后工作正常。我唯一不需要管道的是压缩/解压缩
管道运行良好,它将文件上传到我的服务器,但网站无法正常工作,并且上传的文件与手动方法不同。错误是HTTP Error 500.31 - Failed to load ASP.NET Core runtime
,但我认为这是一个红鲱鱼,因为如果我手动上传文件,完全相同的网站可以正常工作。
我已经有一段时间了,阅读了各种各样的文章和视频,但我似乎无法让它发挥作用。我知道我做错了什么,但我不知道是什么。
我正在努力寻找正确的设置来使用 Azure Dev Ops 做同样的事情。我已广泛阅读此站点Azure Dev Ops,但似乎找不到正确的设置,有人可以帮忙吗?
trigger:
- local-1
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
steps:
- script: dotnet build --configuration $(buildConfiguration)
displayName: 'dotnet build $(buildConfiguration)'
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: publish
publishWebProjects: True
arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)'
zipAfterPublish: false
- task: FtpUpload@2
inputs:
credentialsOption: 'inputs'
serverUrl: 'ftp://ftp.xxxxxxx.com/'
username: 'xxxxxxxxxxxxx'
password: 'xxxxxxxxxx'
rootDirectory: '$(Build.ArtifactStagingDirectory)'
filePatterns: '**'
remoteDirectory: '/'
clean: false
cleanContents: false
preservePaths: false
trustSSL: false
解决方案
From comparing your screenshots, I can see a lot more files and fewer folders in your DevOps Pipelines version than in your manual version. It looks like your FTP task is uploading everything without putting it in folders.
Looking at your YAML file, you have preservePaths: false
in the FTP task. According to the task's documentation:
preservePaths:保留文件路径(必需)
如果选中,则在上传文件的远程目录下重新创建相对本地目录结构。否则,文件会直接上传到远程目录,而无需创建额外的子目录。
例如,假设您的源文件夹是:/home/user/source/
并包含文件:foo/bar/foobar.txt
,而您的远程目录是:/uploads/
。如果选中,文件将上传到:/uploads/foo/bar/foobar.txt
. 否则,为:/uploads/foobar.txt
默认值:false
您应该改为设置preservePaths: true
,以便维护原始目录结构(例如您的.png
和.js
文件在 中wwwroot
)。
- task: FtpUpload@2
inputs:
credentialsOption: 'inputs'
serverUrl: 'ftp://ftp.xxxxxxx.com/'
username: 'xxxxxxxxxxxxx'
password: 'xxxxxxxxxx'
rootDirectory: '$(Build.ArtifactStagingDirectory)/s'
filePatterns: '**'
remoteDirectory: '/'
clean: false
cleanContents: false
preservePaths: true
trustSSL: false
如果您不介意每次都清除 FTP 服务器,那么设置cleanContents: true
可能是一个好主意,因为它可以确保您没有任何文件相互冲突。
编辑:在您进行了一些调查之后,您发现/s
根目录上需要后缀,因此我已将其添加到我的答案中。
推荐阅读
- git - 如何在不使用外部编辑器的情况下将一段代码从一个提交移动到另一个提交(全部在 git 中)
- batch-file - 如何使用批处理脚本重命名具有多个条件的不同子目录中的 PNG 文件?
- android - 如何使用原始文件夹中的视频而不是 videoUrl
- go - 是否有一个常见的习惯用法可以有条件地推迟资源清理错误?
- python - 正则表达式从日志文件中查找组和匹配项
- python - 正则表达式:如何匹配没有阿拉伯元音的单词?
- python - 访问 XLS 文件会发出错误 HTTP 错误 403: Forbidden
- javascript - 如何制作 2 种不同的滚动功能
- r - 如何用R中的列中的行进行计算
- python - 在 Python 包的设置中创建自定义类的实例