在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
相关产品推荐
相关产品推荐

