You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}}"

问题原因

  1. YAML缩进语法错误:DeployDev job的子项(name、needs等)缩进比同层级的publish job子项多,导致GitHub Actions无法正确识别该job的完整配置,进而跳过任务。
  2. 构建产物未跨job传递:GitHub Actions的每个job运行在独立的虚拟机实例中,publish job生成的发布包不会自动共享给DeployDev job,部署任务会因找不到包而异常。
  3. .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'可以移除,简化配置。

验证修复

  1. 将修改后的工作流文件提交到master分支,或手动触发workflow_dispatch。
  2. 查看GitHub Actions运行日志,确认publish job成功上传产物,DeployDev job正常启动并完成部署。

内容的提问来源于stack exchange,提问作者jackazjimmy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:23:15