GitHub 操作发布我的网站并以 HTTP 错误 500.30 结束
GitHub actions publishes my site and ends with HTTP ERROR 500.30
我最初的问题是关于远程服务器上未显示 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
时,我认为它会自动执行此操作。
写完之后,我确实相信遗留文件发生了一些奇怪的事情。如果我手动删除我的网络服务器上的整个目录,并使用上面的命令行,该网站将按预期发布和运行。只有当我尝试 运行 上面的代码
时已经有文件时才会出现此问题
我不知道我做错了什么。
您可以在 msdeploy 命令中尝试使用 -enableRule:DoNotDeleteRule
。
当您在发布设置中从 Visual Studio 部署应用程序时,有一个名为 SkipExtraFilesOnServer 的 属性,它被设置为 true .
msdeploy中的这个属性被转化为-enableRule:DoNotDeleteRule
.
SkipExtraFilesOnServer 与删除目标位置的附加文件有关。如果您选中删除目标位置的其他文件 属性,那么您将在发布设置中看到 SkipExtraFilesOnServer 设置为 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)
- 重建解决方案
- 发布
现在使用此配置,当您在 Output window 中 Publish 您的项目时,您将看到为 msdeploy 生成的命令。
您可以在部署空文件夹的 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
。这样的事情应该有效:
- 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}}'
我最初的问题是关于远程服务器上未显示 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
时,我认为它会自动执行此操作。
写完之后,我确实相信遗留文件发生了一些奇怪的事情。如果我手动删除我的网络服务器上的整个目录,并使用上面的命令行,该网站将按预期发布和运行。只有当我尝试 运行 上面的代码
时已经有文件时才会出现此问题我不知道我做错了什么。
您可以在 msdeploy 命令中尝试使用 -enableRule:DoNotDeleteRule
。
当您在发布设置中从 Visual Studio 部署应用程序时,有一个名为 SkipExtraFilesOnServer 的 属性,它被设置为 true .
msdeploy中的这个属性被转化为-enableRule:DoNotDeleteRule
.
SkipExtraFilesOnServer 与删除目标位置的附加文件有关。如果您选中删除目标位置的其他文件 属性,那么您将在发布设置中看到 SkipExtraFilesOnServer 设置为 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)
- 重建解决方案
- 发布
现在使用此配置,当您在 Output window 中 Publish 您的项目时,您将看到为 msdeploy 生成的命令。
您可以在部署空文件夹的 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
。这样的事情应该有效:
- 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}}'