如何在C#代码中读取Azure Pipeline的机密变量?
解决Azure Pipeline机密变量在C#代码中无法读取的问题
核心问题原因
Azure Pipeline的机密变量默认不会自动注入到任务的环境变量中,必须显式映射,而且映射后的环境变量仅在当前任务的进程上下文生效,跨任务无法传递。你之前的配置里bash步骤没有执行实际的测试命令,导致C#进程没拿到环境变量。
具体解决方法
直接在测试任务中映射机密变量
不用通过bash中转,直接在DotNetCoreCLI任务里配置环境变量,测试进程启动时就能直接拿到:steps: - task: DotNetCoreCLI@2 inputs: command: 'test' env: AZURE_CLIENT_ID: $(MASKED_AZURE_CLIENT_ID)对应的C#代码简化为:
var azureClientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID", EnvironmentVariableTarget.Process);如果必须用bash步骤启动测试
要确保bash步骤里包含运行测试的命令,环境变量才会在测试进程的上下文里生效:steps: - bash: dotnet test env: MASKED_AZURE_CLIENT_ID: $(MASKED_AZURE_CLIENT_ID)验证变量是否正确映射
可以先在bash步骤里打印变量(机密内容会被Azure自动屏蔽,显示为***),确认映射生效:steps: - bash: echo "变量已映射:$MASKED_AZURE_CLIENT_ID" env: MASKED_AZURE_CLIENT_ID: $(MASKED_AZURE_CLIENT_ID)输出里出现
***就说明映射成功,只是机密内容被系统保护了。
内容的提问来源于stack exchange,提问作者GregG123
相关产品推荐
相关产品推荐

