使用GitHub Actions部署.NET Core应用到IIS服务器遇错求助
问题分析与解决方案
核心问题
你使用的azure/webapps-deploy Action是Azure App Service专属工具,它依赖Azure发布配置文件中特有的Kudu服务URL字段,而GoDaddy Plesk主机生成的发布配置(无论是.publishsettings还是Visual Studio导出的.pubxml)都不包含该字段,因此会触发"Publish profile does not contain kudu URL"错误。
此外,你的工作流中还有一个小问题:.NET Core SDK安装步骤引用了未定义的matrix.dotnet-version变量,会导致步骤执行失败。
解决方案
改用通用MSDeploy(Web Deploy)部署方式,适配GoDaddy主机的部署要求,具体步骤如下:
1. 拆分发布配置为独立GitHub Secrets
将原.pubxml中的关键信息拆分为3个GitHub仓库密钥:
MSDEPLOY_SERVICE_URL:值为https://example.com:8172/msdeploy.axd?site=example.comMSDEPLOY_USERNAME:值为.pubxml中的UserName内容MSDEPLOY_PASSWORD:值为.pubxml中的UserPWD内容
2. 修正并更新GitHub Actions工作流
替换原工作流内容为以下版本:
name: 🚀 Deploy website to PROD on: workflow_dispatch: push: branches: [main] paths-ignore: [".vscode/**", "README.md", ".*"] permissions: contents: read jobs: web-deploy: name: 🎉 Deploy Prod runs-on: ubuntu-latest steps: - name: 🚚 Get latest code uses: actions/checkout@v3 - name: Setup .NET Core SDK 6.0 uses: actions/setup-dotnet@v3 with: dotnet-version: '6.0.x' - name: Install dependencies run: dotnet restore - name: Build run: dotnet publish --configuration Release --no-restore - name: Deploy with MSDeploy run: | dotnet msdeploy publish \ --source:package='./bin/Release/net6.0/publish' \ --dest:auto,ComputerName="${{ secrets.MSDEPLOY_SERVICE_URL }}",UserName="${{ secrets.MSDEPLOY_USERNAME }}",Password="${{ secrets.MSDEPLOY_PASSWORD }}",AuthType=Basic \ --verb:sync \ --enableRule:DoNotDeleteRule \ --disableLink:AppPoolExtension \ --disableLink:ContentExtension \ --disableLink:CertificateExtension
替代方案:使用第三方Web Deploy Action
如果偏好使用Action而非命令行,可改用支持通用Web Deploy的第三方Action,替换Deploy步骤为:
- name: Deploy to GoDaddy uses: elvenworks/web-deploy-action@v1 with: web_deploy_package: './bin/Release/net6.0/publish' web_deploy_username: ${{ secrets.MSDEPLOY_USERNAME }} web_deploy_password: ${{ secrets.MSDEPLOY_PASSWORD }} web_deploy_server: ${{ secrets.MSDEPLOY_SERVICE_URL }} web_deploy_site_name: 'example.com'
关键说明
GoDaddy Windows主机支持标准MSDeploy协议,但不兼容Azure专属的部署工具链。通过直接调用dotnet msdeploy命令或通用Web Deploy Action,可绕过Azure特有的Kudu依赖,实现正常部署。
内容的提问来源于stack exchange,提问作者Chris Barr
相关产品推荐
相关产品推荐

