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

在GitHub Actions中配置.NET Core CI/CD管道区分环境配置文件

调整GitHub Actions工作流实现环境配置区分

一、核心调整思路

.NET应用默认会根据运行环境加载对应配置文件:开发环境(Development)自动加载appsettings.development.json,生产环境(Production)默认使用appsettings.json。要在CI/CD中实现分支对应环境,需从触发分支、发布命令、配置文件打包三个层面调整。

二、具体工作流修改步骤

1. 扩展分支触发规则

让develop分支对应开发环境,main/master分支对应生产环境,修改触发配置:

on:
  push:
    branches:
      - develop
      - main # 或master,根据你的主分支名调整

2. 添加环境变量区分环境

在工作流中根据当前推送分支设置环境变量,后续步骤复用该变量实现差异化部署:

jobs:
  build-and-push:
    runs-on: self-hosted
    steps:
      - name: Tst
        run: whoami
      - name: Test Checkout
        uses: actions/checkout@v3
      # 新增:根据分支设置环境与部署路径变量
      - name: Set environment variable
        run: |
          if ($env:GITHUB_REF -eq 'refs/heads/develop') {
            echo "ENVIRONMENT=Development" | Out-File -FilePath $env:GITHUB_ENV -Append
            echo "DEPLOY_PATH=C:\Test\development" | Out-File -FilePath $env:GITHUB_ENV -Append
          } else {
            echo "ENVIRONMENT=Production" | Out-File -FilePath $env:GITHUB_ENV -Append
            echo "DEPLOY_PATH=C:\Test\production" | Out-File -FilePath $env:GITHUB_ENV -Append
          }

3. 修正发布命令,指定运行环境

dotnet publish会自动执行构建,可删除单独的dotnet build步骤;同时通过--environment参数指定运行环境,确保对应配置文件被加载:

# 删除原有的Build Dotnet application步骤
      - name: Release Dotnet application
        run: |
         stop-webapppool Test
         stop-iissite -Name Test -Confirm:$false # 修正语法错误,调整参数位置
         dotnet publish Test.App.Api -c Release --environment ${{ env.ENVIRONMENT }} --output ${{ env.DEPLOY_PATH }}

4. 确保配置文件被正确打包

检查项目文件(.csproj),添加以下配置确保环境配置文件被复制到发布目录:

<ItemGroup>
  <None Update="appsettings.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
  <None Update="appsettings.development.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

三、完整修改后的工作流YAML

name: Build and Publish to Server

on:
  push:
    branches:
      - develop
      - main

jobs:
  build-and-push:
    runs-on: self-hosted
    steps:
      - name: Tst
        run: whoami
      - name: Test Checkout
        uses: actions/checkout@v3
      - name: Set environment variable
        run: |
          if ($env:GITHUB_REF -eq 'refs/heads/develop') {
            echo "ENVIRONMENT=Development" | Out-File -FilePath $env:GITHUB_ENV -Append
            echo "DEPLOY_PATH=C:\Test\development" | Out-File -FilePath $env:GITHUB_ENV -Append
          } else {
            echo "ENVIRONMENT=Production" | Out-File -FilePath $env:GITHUB_ENV -Append
            echo "DEPLOY_PATH=C:\Test\production" | Out-File -FilePath $env:GITHUB_ENV -Append
          }
      - name: Release Dotnet application
        run: |
         stop-webapppool Test
         stop-iissite -Name Test -Confirm:$false
         dotnet publish Test.App.Api -c Release --environment ${{ env.ENVIRONMENT }} --output ${{ env.DEPLOY_PATH }}
      - name: Run Dotnet application 
        run: | 
         start-webapppool Test
         start-iissite -Name Test

四、关键说明

  • 环境变量作用:通过分支自动切换环境和部署目录,避免手动修改命令。
  • --environment参数:告诉.NET应用运行时加载对应环境的配置文件,开发环境会优先用appsettings.development.json覆盖appsettings.json的配置项。
  • 冗余步骤删除:dotnet publish默认会执行构建,单独的dotnet build属于重复操作,可省略。
  • IIS命令修正:原命令中stop-iissite -Name Test-Confirm: $false语法错误,需将-Confirm:$false作为独立参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:37:29