Azure devops 如何使用Azure管线发布web应用程序?
在Visual Studio(2019)中,我可以构建我的应用程序并在本地发布。然后我可以手动将文件复制到我的服务器上,一切正常 这是使用手动压缩/解压缩方法的文件列表:) 这是使用Azure管道方法的文件列表:( 我喜欢C#Asp.Net-Mvc Core 2.2,我将很快迁移到3.1,但我想在继续之前解决这个问题 我正在尝试设置Azure管道,因为我使用VSTS-GIT进行源代码管理 我的手动过程是Azure devops 如何使用Azure管线发布web应用程序?,azure-devops,yaml,Azure Devops,Yaml,在Visual Studio(2019)中,我可以构建我的应用程序并在本地发布。然后我可以手动将文件复制到我的服务器上,一切正常 这是使用手动压缩/解压缩方法的文件列表:) 这是使用Azure管道方法的文件列表:( 我喜欢C#Asp.Net-Mvc Core 2.2,我将很快迁移到3.1,但我想在继续之前解决这个问题 我正在尝试设置Azure管道,因为我使用VSTS-GIT进行源代码管理 我的手动过程是 在Visual Studio中构建应用程序(2019年) 在我的计算机上发布本地文件夹的
HTTP错误500.31-无法加载ASP.NET核心运行时
,但我认为这是一个误导,因为如果我手动上载文件,完全相同的网站工作得很好盟友
我在这方面已经有一段时间了,阅读了各种各样的文章和视频,但我似乎无法让它发挥作用。我知道我做错了什么,但我不知道是什么
我正在努力找到正确的设置来完成与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
通过比较您的屏幕截图,我可以在您的DevOps Pipelines版本中看到比手动版本更多的文件和更少的文件夹。看起来您的FTP任务正在上载所有内容,而没有将其放入文件夹中 查看YAML文件,FTP任务中有
preservepath:false
。根据:
保留路径:保留文件路径(必需)如果选中,将在上载文件的远程目录下重新创建相对的本地目录结构。否则,文件将直接上载到远程目录,而不创建其他子目录。
例如,假设您的源文件夹为:
/home/user/source/
,包含文件:foo/bar/foobar.txt
,远程目录为:/uploads/
。
如果选中,文件将上载到:/uploads/foo/bar/foobar.txt
。否则,文件将上载到:/uploads/foobar.txt
默认值:
false
您应该改为设置preservepath:true
,以便保持原始目录结构(例如wwwroot
中的.png
和.js
文件)
-任务:FtpUpload@2
投入:
Credentials选项:“输入”
服务器URL:'ftp://ftp.xxxxxxx.com/'
用户名:“xxxxxxxx”
密码:“XXXXXXXXX”
根目录:'$(Build.ArtifactStagingDirectory)/s'
文件模式:'**'
remoteDirectory:“/”
干净:假
内容:错误
答案:对
trustSSL:false
如果您不介意每次都清除FTP服务器,那么设置cleanContents:true
可能是个好主意,因为它可以确保您不会有任何文件相互冲突
编辑:在对您进行一些调查之后,您发现根目录上必须有
/s
后缀,因此我将其添加到了我的答案中。这不是我自己的问题。但我猜其他人这样做的原因是您说问题的原因是azure管道FTP的结果不一致你没有提供这方面的任何信息,因此没有人知道问题出在哪里。因此,你需要以两种方式分享你不同结果的一些证据,例如屏幕截图和你想要的结果是什么?好的,我会看看在不使文章太大的情况下还能提供哪些其他信息。Sim请注意,我正在尝试在Azure管道中复制我的手动过程。我会将此添加到问题中。不要担心文章的长度,任何想要帮助你的人都会耐心阅读你的问题。你目前需要提供的是两种方法的结果之间的差异。要做到这一点,我必须列出文件cont你可以使用ents或附加zip文件,这是很多信息。这也意味着共享机密信息,因此这并不实际。我会看看我是否可以做一个屏幕截图或其他什么是的,所有这些js、png等都在wwwroot
中。在上传之前,这两种情况下的目录都是完全空的。我尝试了d两者都是,这是我最后一次离开文件inI的状态。我现在正在使用preservepath:true
再次运行管道。yaml处于最后一种状态,我在使用不同设置组合进行了大量尝试和错误后离开了它。在反复失败后,我变得有点暴躁。这样做很有效。它以正确的方式创建了文件但是在一个名为s
的根目录下,我记得我的问题是从这里开始的,我最近才回到这里this@djack109s
部分听起来很像DevOps管道中路径的最后一部分:它也在复制根目录本身。您是否使用ls
等工具进行了检查方法在$(Build.ArtifactStagingDirectory)中没有额外的s
文件夹
?你也可以试试。我想我无法找到那个文件夹。我该怎么做,它都在azure中。我实际上没有指定任何目录信息,我只是使用azure提供的目录变量,这是一项确定这些变量是什么的任务。这起了作用。“$(Build.ArtifactStagingDirectory)/s”
直接发布到根目录。我回到azure文档并