3

我最初的问题是关于未wwwroot在远程服务器上显示文件夹的部署问题。事实证明,我错了,这实际上不是问题。所以我编辑了我的问题(前几条评论现在不相关了)!!

我正在尝试通过 GitHub 操作将我的网站从 GitHub 发布到我的服务器

- name: Stop Application Pool  
  shell: cmd  
  run: '"C:/Program Files (x86)/IIS/Microsoft Web Deploy V3/msdeploy.exe" -verb:sync -allowUntrusted -source:recycleApp -dest:recycleApp="${{ env.IIS_WEBSITE_NAME }}",recycleMode="StopAppPool",computerName="${{ env.DOMAIN_URL }}:8172/msdeploy.axd?site=${{ env.IIS_WEBSITE_NAME }}",username="${{ env.IIS_SERVER_USERNAME }}",password="${{ env.IIS_SERVER_PASSWORD }}",AuthType="Basic"'  
- name: Deploy Application to Live  
  shell: cmd  
  run: '"C:/Program Files (x86)/IIS/Microsoft Web Deploy V3/msdeploy.exe" -verb:sync -allowUntrusted -source:contentPath="%cd%\${{ env.PUBLISH_PATH }}" -dest:contentPath="${{env.IIS_WEBSITE_NAME}}",computerName="${{ env.DOMAIN_URL }}:8172/msdeploy.axd?site=${{ env.IIS_WEBSITE_NAME }}",username="${{ env.IIS_SERVER_USERNAME }}",password="${{ env.IIS_SERVER_PASSWORD }}",authtype="Basic"'  
- name: Start Application Pool  
  shell: cmd  
  run: '"C:/Program Files (x86)/IIS/Microsoft Web Deploy V3/msdeploy.exe" -verb:sync -allowUntrusted -source:recycleApp -dest:recycleApp="${{ env.IIS_WEBSITE_NAME }}",recycleMode="StartAppPool",computerName="${{ env.DOMAIN_URL }}:8172/msdeploy.axd?site=${{ env.IIS_WEBSITE_NAME }}",username="${{ env.IIS_SERVER_USERNAME }}",password="${{ env.IIS_SERVER_PASSWORD }}",AuthType="Basic"'   

以上是 GitHub 操作中的代码。这将停止服务器上的应用程序池、部署站点并启动应用程序池

这在大多数情况下都有效(GitHub 操作中没有异常或错误消息)但是当我访问我的结果时,我总是看到

在此处输入图像描述

如果我在 Visual Studio 中使用 WebDeploy,该网站可以正常发布

我已经研究过,似乎我还需要设置“在目标位置删除其他文件”,但是,我看不到msdeploy执行此操作的命令行参数。但是,当我使用动词sync时,我认为它会自动执行此操作。

写完之后,我确实相信剩下的文件会发生一些奇怪的事情。如果我手动删除我的网络服务器上的整个目录,并使用上面的命令行,网站会按预期发布和工作。仅当我尝试运行上面的代码时已经存在文件时才会出现此问题

我不知道我做错了什么。

4

2 回答 2

3

-enableRule:DoNotDeleteRule您可以在您的 msdeploy 命令中尝试使用。

当您在发布设置中从 Visual Studio 部署应用程序时,有一个名为SkipExtraFilesOnServer的属性,它设置为true

msdeploy 中的此属性转换为-enableRule:DoNotDeleteRule.

SkipExtraFilesOnServer 与 Remove additional files at destination 有关。如果您选中 Remove additional files at destination 属性,您将看到 SkipExtraFilesOnServer 在 Publish Settings 中设置为 false。

在此处输入图像描述

相反的命令是-disableRule:DoNotDeleteRule。如果您可以直接访问服务器,则可以转到目录C:/Program Files (x86)/IIS/Microsoft Web Deploy V3/并在控制台中查看 msdeploy 文档:

msdeploy.exe /?或更具体地说msdeploy.exe -help -enableRule

如果您想查看 Visual Studio 在发布期间生成的命令,可以按照以下步骤操作:

  • 在 Visual Studio 中右键单击您的项目
  • 卸载项目(如果是 .NET Framework)
  • 单击编辑项目文件
  • <PropertyGroup>添加<UseMsdeployExe>true</UseMsdeployExe>
  • 重新加载项目(如果是 .NET Framework)
  • 重建解决方案
  • 发布

现在使用此配置,当您在“输出”窗口中发布项目时,您将看到为 msdeploy 生成的命令。

于 2020-11-30T17:06:04.963 回答
0

您可以在部署空文件夹的 GitHub 操作中添加一个新步骤。它与部署步骤相同,但source:contentPath指向一个空文件夹。

- name: Empty destination folder  
  shell: cmd  
  run: '"C:/Program Files (x86)/IIS/Microsoft Web Deploy V3/msdeploy.exe" -verb:sync -allowUntrusted -source:contentPath="PATH\TO\EMPTY\FOLDER" -dest:contentPath="${{env.IIS_WEBSITE_NAME}}",computerName="${{ env.DOMAIN_URL }}:8172/msdeploy.axd?site=${{ env.IIS_WEBSITE_NAME }}",username="${{ env.IIS_SERVER_USERNAME }}",password="${{ env.IIS_SERVER_PASSWORD }}",authtype="Basic"'

或者,您可以尝试使用Remove-Item在 Web 服务器上使用的额外步骤。像这样的东西应该工作:

- name: Empty destination folder  
  shell: cmd  
  run: 'Invoke-Command -computername ${{ env.DOMAIN_URL }} {Remove-Item -path $args[0] -Recurse} -cred New-Object System.Management.Automation.PSCredential(${{ env.IIS_SERVER_USERNAME }},${{ env.IIS_SERVER_PASSWORD }}) -ArgumentList ${{env.IIS_WEBSITE_NAME}}'
于 2020-12-03T02:39:41.477 回答