如何将GitHub Secret注入C#应用环境变量?Azure部署遇异常
问题分析
你当前的配置存在核心误区:GitHub Workflow中定义的env仅作用于Workflow运行的临时虚拟机环境,不会自动同步到Azure Web App的运行环境。你的C#代码读取的是Azure Web App运行时的环境变量,而非GitHub构建过程中的变量,因此无法获取到MYSECRET的值。
解决方案
有两种可靠的方式将GitHub Secret传递到Azure Web App并让程序读取:
方案1:直接在Azure Portal配置应用设置
- 登录Azure Portal,找到你的Web App(
PhillipsEngineerTelirite) - 进入配置 > 应用设置页面
- 点击新建应用设置,添加键为
MYSECRET,值为你的GitHub Secret对应的内容(ddd) - 保存设置,Web App会自动重启
此时你的C#代码可以通过Environment.GetEnvironmentVariable("MYSECRET", EnvironmentVariableTarget.Process)读取到该值(Azure Web App的应用设置会作为进程级环境变量注入)。
方案2:通过GitHub Workflow部署时传入环境变量
修改你的publish作业中的azure/webapps-deploy步骤,添加app-settings-json参数,将GitHub Secret作为应用设置传入:
- name: Deploy to Azure Web App id: deploy-to-web-app uses: azure/webapps-deploy@v2 with: app-name: 'PhillipsEngineerTelirite' slot-name: Production publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_03557B670BF14D93BD6244DC95264F2C }} package: . app-settings-json: | { "MYSECRET": "${{ secrets.MYSECRET }}" }
这个配置会在部署时自动将MYSECRET添加到Azure Web App的应用设置中,无需手动在Portal操作。
代码优化建议
你的代码中OnInitialized方法会覆盖进程级的MYSECRET为ccc,这会导致从Azure读取到的真实值被覆盖,建议移除这段代码:
// 移除以下代码 protected override void OnInitialized() { Environment.SetEnvironmentVariable(variable: "MYSECRET", value: "ccc"); }
同时,读取环境变量时优先使用EnvironmentVariableTarget.Process即可,因为Azure的应用设置都是注入到进程级的:
private string mySecret = Environment.GetEnvironmentVariable("MYSECRET", EnvironmentVariableTarget.Process) ?? "";
内容的提问来源于stack exchange,提问作者EngineerDude
相关产品推荐
相关产品推荐

