在GitHub Actions中替换.NET 6应用appsettings.json变量的方案咨询
替换.NET 6 appsettings.json变量的GitHub Actions方案
以下是几种官方或通用的实现方案,无需自行开发:
1. 利用.NET原生环境变量覆盖机制
.NET 6本身支持通过环境变量覆盖appsettings.json中的配置项,规则是用双下划线__替换配置路径中的冒号:。比如要覆盖ConnectionStrings:Default,对应的环境变量名是ConnectionStrings__Default。
在GitHub Actions部署作业中,直接将仓库/组织密钥或环境变量注入到部署步骤的环境变量里即可:
jobs: deploy: runs-on: ubuntu-latest steps: - name: 下载应用包工件 uses: actions/download-artifact@v4 with: name: app-package path: ./app - name: 注入环境变量并部署 env: ConnectionStrings__Default: ${{ secrets.DB_CONNECTION_STRING }} AppSettings__ApiKey: ${{ vars.API_KEY }} run: | # 这里填写你的部署命令,比如部署到Azure App Service或启动自托管应用 dotnet ./app/YourApp.dll
这种方案完全依赖.NET原生能力,不需要额外工具,稳定性最高。
2. 用脚本直接替换文件内容
如果必须修改appsettings.json文件本身(比如部署到传统IIS需要物理文件),可以用简单的Shell或PowerShell脚本完成变量替换。
Bash版本(适用于Ubuntu Runner)
jobs: deploy: runs-on: ubuntu-latest steps: - name: 下载应用包工件 uses: actions/download-artifact@v4 with: name: app-package path: ./app - name: 替换appsettings.json中的变量 run: | sed -i "s/\"ConnectionStrings\": {\"Default\": \"PLACEHOLDER\"}/\"ConnectionStrings\": {\"Default\": \"${{ secrets.DB_CONNECTION_STRING }}\"}/" ./app/appsettings.json sed -i "s/\"ApiKey\": \"PLACEHOLDER\"/\"ApiKey\": \"${{ vars.API_KEY }}\"/" ./app/appsettings.json - name: 执行部署 run: # 填写部署命令
PowerShell版本(适用于Windows Runner)
jobs: deploy: runs-on: windows-latest steps: - name: 下载应用包工件 uses: actions/download-artifact@v4 with: name: app-package path: ./app - name: 替换appsettings.json中的变量 shell: pwsh run: | $content = Get-Content ./app/appsettings.json -Raw $content = $content -replace '"ConnectionStrings": {"Default": "PLACEHOLDER"}', '"ConnectionStrings": {"Default": "${{ secrets.DB_CONNECTION_STRING }}"}' $content = $content -replace '"ApiKey": "PLACEHOLDER"', '"ApiKey": "${{ vars.API_KEY }}"' $content | Set-Content ./app/appsettings.json - name: 执行部署 run: # 填写部署命令
这种方案灵活无依赖,适用于任何需要修改物理文件的场景。
3. 使用社区维护的变量替换Action
虽然微软官方的variable-substitution已弃用,但社区有成熟的替代工具,比如cschleiden/replace-tokens,支持在JSON、YAML等文件中替换占位符。
首先在appsettings.json中用占位符标记需要替换的项:
{ "ConnectionStrings": { "Default": "#{DB_CONNECTION_STRING}#" }, "AppSettings": { "ApiKey": "#{API_KEY}#" } }
然后在GitHub Actions中配置:
jobs: deploy: runs-on: ubuntu-latest steps: - name: 下载应用包工件 uses: actions/download-artifact@v4 with: name: app-package path: ./app - name: 替换appsettings.json中的占位符 uses: cschleiden/replace-tokens@v1 with: files: ./app/appsettings.json tokenPrefix: '#{' tokenSuffix: '}#' env: DB_CONNECTION_STRING: ${{ secrets.DB_CONNECTION_STRING }} API_KEY: ${{ vars.API_KEY }} - name: 执行部署 run: # 填写部署命令
这个Action功能丰富,支持多种文件格式和占位符规则,社区使用广泛,稳定性有保障。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

