GitHub Actions Dev部署Job被跳过问题(.Net 4.8 Web应用)
.NET 4.8 Web应用多环境部署:Dev部署任务被跳过的修复方案
问题背景
我正在编写GitHub Actions YAML工作流,用来把.NET 4.8 Web应用部署到Dev、PreProd、Prod等多环境。现在构建任务能跑成功,但Dev环境的部署任务一直被跳过。我的工作流配置如下:
name: publish on: workflow_dispatch: push: branches: - master env: AZURE_WEBAPP_NAME: gitacdevweb AZURE_DEVWEBAPP_NAME: GitAc-Dev AZURE_PREPRODWEBAPP_NAME: GitAc-PreProd AZURE_WEBAPP_PACKAGE_PATH: "./publish" jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: setup .Net id: build_step uses: actions/setup-dotnet@v3 with: dotnet-version: '6.0.x' - name: restore run: dotnet restore ./deploynet.csproj - name: build run: dotnet build ./deploynet.csproj --configuration Release --no-restore - name: publish run: dotnet publish ./deploynet.csproj --configuration Release --no-build --output '${{env.AZURE_WEBAPP_PACKAGE_PATH}}' DeployDev: name: Deployment needs: publish if: github.ref == 'refs/heads/master' runs-on: ubuntu-latest environment: name: Dev steps: - name: Deploy uses: Azure/webapps-deploy@v2 with: app-name: ${{env.AZURE_DEVWEBAPP_NAME}} publish-profile: ${{secrets.AZURE_DEVPUBLISH_PROFILE}} package: "${{env.AZURE_WEBAPP_PACKAGE_PATH}}"
问题原因
- YAML缩进语法错误:
DeployDevjob的子项(name、needs等)缩进比同层级的publishjob子项多,导致GitHub Actions无法正确识别该job的完整配置,进而跳过任务。 - 构建产物未跨job传递:GitHub Actions的每个job运行在独立的虚拟机实例中,
publishjob生成的发布包不会自动共享给DeployDevjob,部署任务会因找不到包而异常。 - .NET版本不匹配:应用基于.NET Framework 4.8,但构建阶段使用.NET 6.0.x SDK,虽然后者可以构建前者项目,但可能存在兼容性问题,影响产物有效性。
修复步骤
1. 修复YAML缩进错误
将DeployDev job的所有子项缩进调整为与publish job一致(2个空格):
DeployDev: name: Deployment needs: publish if: github.ref == 'refs/heads/master' runs-on: ubuntu-latest environment: name: Dev steps: - name: Deploy uses: Azure/webapps-deploy@v2 with: app-name: ${{env.AZURE_DEVWEBAPP_NAME}} publish-profile: ${{secrets.AZURE_DEVPUBLISH_PROFILE}} package: "${{env.AZURE_WEBAPP_PACKAGE_PATH}}"
2. 添加构建产物跨job传递
在publish job末尾添加上传产物的步骤,在DeployDev job开头添加下载产物的步骤:
修改后的publish job:
publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: setup .NET id: build_step uses: actions/setup-dotnet@v3 with: dotnet-version: '6.0.x' - name: restore run: dotnet restore ./deploynet.csproj - name: build run: dotnet build ./deploynet.csproj --configuration Release --no-restore - name: publish run: dotnet publish ./deploynet.csproj --configuration Release --no-build --output '${{env.AZURE_WEBAPP_PACKAGE_PATH}}' # 新增:上传构建产物 - name: Upload publish artifact uses: actions/upload-artifact@v3 with: name: webapp-package path: ${{env.AZURE_WEBAPP_PACKAGE_PATH}}
修改后的DeployDev job:
DeployDev: name: Deployment needs: publish if: github.ref == 'refs/heads/master' runs-on: ubuntu-latest environment: name: Dev steps: # 新增:下载构建产物 - name: Download publish artifact uses: actions/download-artifact@v3 with: name: webapp-package path: ${{env.AZURE_WEBAPP_PACKAGE_PATH}} - name: Deploy uses: Azure/webapps-deploy@v2 with: app-name: ${{env.AZURE_DEVWEBAPP_NAME}} publish-profile: ${{secrets.AZURE_DEVPUBLISH_PROFILE}} package: "${{env.AZURE_WEBAPP_PACKAGE_PATH}}"
3. 修正.NET Framework构建环境(可选但推荐)
如果用.NET 6 SDK构建出现兼容性问题,改用Windows runner+MSBuild构建:
publish: runs-on: windows-latest steps: - uses: actions/checkout@v3 # 安装MSBuild和.NET Framework 4.8 - name: Setup MSBuild uses: microsoft/setup-msbuild@v1 - name: Restore NuGet packages run: nuget restore ./deploynet.csproj - name: Build project run: msbuild ./deploynet.csproj /p:Configuration=Release /p:Platform="Any CPU" - name: Publish project run: msbuild ./deploynet.csproj /p:Configuration=Release /p:Platform="Any CPU" /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:PackageLocation="${{env.AZURE_WEBAPP_PACKAGE_PATH}}" - name: Upload publish artifact uses: actions/upload-artifact@v3 with: name: webapp-package path: ${{env.AZURE_WEBAPP_PACKAGE_PATH}}
4. 简化条件判断(可选)
由于工作流触发条件已经限定为master分支,DeployDev中的if: github.ref == 'refs/heads/master'可以移除,简化配置。
验证修复
- 将修改后的工作流文件提交到master分支,或手动触发
workflow_dispatch。 - 查看GitHub Actions运行日志,确认
publishjob成功上传产物,DeployDevjob正常启动并完成部署。
内容的提问来源于stack exchange,提问作者jackazjimmy
相关产品推荐
相关产品推荐

