使用GitHub Action部署.NET 6 Web API:appsettings.json未随环境配置更新
核心认知纠正:Azure Web App应用设置不修改物理文件
Azure Web App的az webapp config appsettings set命令是设置平台级的应用配置,这些配置会在应用运行时覆盖appsettings.json中的同名值,不会直接修改服务器上Kudu控制台里看到的appsettings.json物理文件。你在Kudu看到文件没变化是正常的,但应用实际运行时会优先使用平台设置的配置。验证配置是否生效,应该去Azure门户的Web App -> 配置 -> 应用设置里查看,或者通过应用接口输出当前配置值。
问题1:az cli命令中的配置文件路径错误
你的部署步骤中,执行az webapp config appsettings set时指定的文件路径不正确:原命令用的是@Test.WebApi/Test.WebApi/${{ env.JSON_PATH }},但仓库中配置文件实际路径是src/Test.WebApi/${{ env.JSON_PATH }}(对应WORKING_DIRECTORY变量)。路径错误会导致az cli找不到配置文件,自然无法设置应用配置。
修正方法:
将deploy步骤中的路径改为@${{ env.WORKING_DIRECTORY }}/${{ env.JSON_PATH }},默认配置文件路径也对应修改:
- name: Default WebApp Configuration from appsettings.json uses: azure/CLI@v1 with: azcliversion: 2.42.0 inlineScript: | az webapp config appsettings set -g "${{ env.RESOURCE_GROUP }}" -n '${{ env.AZURE_WEBAPP_WEBAPI_NAME }}' --settings "@${{ env.WORKING_DIRECTORY }}/appsettings.json" -s staging - name: WebApp Configuration uses: azure/CLI@v1 with: azcliversion: 2.42.0 inlineScript: | az webapp config appsettings set -g "${{ env.RESOURCE_GROUP }}" -n '${{ env.AZURE_WEBAPP_WEBAPI_NAME }}' --settings "@${{ env.WORKING_DIRECTORY }}/${{ env.JSON_PATH }}" -s staging
问题2:Build步骤未使用正确的发布命令
当前Build步骤用的是dotnet build,这只会生成编译后的二进制文件,不会生成适合部署的完整包,也不会处理环境配置的合并。正确做法是使用dotnet publish命令,可指定环境自动合并配置:
修正Build步骤:
替换原Build和Upload artifact步骤:
- name: Publish Project run: dotnet publish ${{ env.WORKING_DIRECTORY }}/Test.WebApi.sln --configuration Release --output "${{ env.WORKING_DIRECTORY }}/_publish" - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ASP-app path: "${{ env.WORKING_DIRECTORY }}/_publish"
deploy步骤中package路径保持download/ASP-app即可(对应下载的发布包)。
问题3:Slot Swap后的配置重复设置问题
在deploy-to-production-slot步骤中,你在swap之后又重新执行了应用设置命令,但默认情况下,Slot Swap会将staging槽的非槽特定应用设置同步到production槽。如果staging槽配置已正确设置,swap后production槽会自动继承,无需重复执行设置命令,重复执行反而可能因路径错误导致配置被覆盖。
建议:
移除deploy-to-production-slot中的Default WebApp Configuration from appsettings.json和WebApp Configuration步骤,依赖slot swap同步配置即可。若有production槽独有的配置,可在Azure门户中将其标记为槽特定,swap时不会覆盖这些配置。
额外验证步骤
- 在GitHub Actions部署步骤中,添加查看配置文件内容的步骤,确认路径正确:
- name: Verify config file exists run: | cat ${{ env.WORKING_DIRECTORY }}/${{ env.JSON_PATH }}
- 执行az cli命令后,添加查看当前应用设置的步骤,确认配置已生效:
- name: Check App Settings uses: azure/CLI@v1 with: azcliversion: 2.42.0 inlineScript: | az webapp config appsettings list -g "${{ env.RESOURCE_GROUP }}" -n "${{ env.AZURE_WEBAPP_WEBAPI_NAME }}" -s staging
内容的提问来源于stack exchange,提问作者Rakesh Kumar

