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

通过Github Actions部署Docker至App Service时替换appsettings.json值

解决GitHub Actions部署Docker容器到Azure App Service时替换appsettings.json的问题

完全可行,以下是几种实用方案,按推荐优先级排序:

方案一:用Azure App Service应用设置直接覆盖(推荐)

Azure App Service原生支持通过应用设置覆盖appsettings.json中的配置,无需修改容器内文件,步骤如下:

  • 在GitHub仓库的Secrets中存入需要替换的配置项(比如DB_CONNECTION_STRING)
  • 在流水线中添加Azure CLI步骤,直接设置应用服务的配置:
- name: Configure App Service settings
  run: |
    az webapp config appsettings set --name appname-api-dev --resource-group <你的资源组名称> --settings \
      "ConnectionStrings__DefaultConnection=${{ secrets.DB_CONNECTION_STRING }}" \
      "AppSettings__ApiUrl=${{ secrets.API_URL }}"

注意:配置键名要用双下划线__替换JSON中的层级分隔,比如ConnectionStrings.DefaultConnection对应ConnectionStrings__DefaultConnection,.NET应用会自动识别这种映射。

方案二:构建Docker镜像前替换appsettings.json

如果需要在镜像构建阶段就固化配置,可以在GitHub Actions中先修改文件再构建:

- name: Replace appsettings values
  run: |
    cd src/App
    # 用jq工具修改JSON(self-hosted runner需提前安装jq)
    jq '.ConnectionStrings.DefaultConnection = "${{ secrets.DB_CONNECTION_STRING }}"' appsettings.json > temp.json && mv temp.json appsettings.json

# 原有的构建推送步骤不变
- name: Docker Build & Push to ACR
  run: |
        cd src/App
        docker build -f Dockerfile .. --tag dummy.azurecr.io/repo/my-image-name:latest
        docker push dummy.azurecr.io/repo/my-image-name:latest

如果是Windows环境的self-hosted runner,可改用PowerShell脚本:

$settings = Get-Content appsettings.json | ConvertFrom-Json
$settings.ConnectionStrings.DefaultConnection = "${{ secrets.DB_CONNECTION_STRING }}"
$settings | ConvertTo-Json -Depth 10 | Set-Content appsettings.json

方案三:通过环境变量传递配置到容器

在Dockerfile中定义环境变量,让应用程序优先读取环境变量覆盖配置:

  1. 修改Dockerfile添加环境变量:
ENV ConnectionStrings__DefaultConnection=""
ENV AppSettings__MaxRetryCount=""
  1. 应用程序配置为优先读取环境变量(.NET应用默认支持此逻辑)
  2. 后续通过方案一的Azure CLI步骤设置这些环境变量即可

完整修改后的流水线示例(方案一)

name: appname-api-dev

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: self-hosted
   
    steps:
    - name: Log into registry
      uses: docker/login-action@v1
      with:
          registry: ${{ secrets.ACR_NAME }}
          username: ${{ secrets.ACR_USERNAME }}
          password: ${{ secrets.ACR_PASSWORD }}
           
    - name: Docker Build & Push to ACR
      run: |
            cd src/App
            docker build -f Dockerfile .. --tag dummy.azurecr.io/repo/my-image-name:latest
            docker push dummy.azurecr.io/repo/my-image-name:latest
 
    - name: 'Login via Azure CLI'
      uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}

    - name: Configure App Service settings
      run: |
        az webapp config appsettings set --name appname-api-dev --resource-group <你的资源组名> --settings \
          "ConnectionStrings__DefaultConnection=${{ secrets.DB_CONNECTION_STRING }}" \
          "AppSettings__MaxRetryCount=${{ secrets.MAX_RETRY_COUNT }}"
 
    - uses: azure/webapps-deploy@v2
      with:
          app-name: 'appname-api-dev'
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          images: dummy.azurecr.io/repo/my-image-name:latest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:39:20