我有一个Azure函数(.NET Core),该函数被配置为从JSON文件和环境变量读取应用程序设置:
mediaRecorder.onstop=(e)=>{
let blob=new Blob(chunks,{'type':'audio/mp3;'});
chunks=[];
let audioURL=window.URL.createObjectURL(blob);
audio.src=audioURL;
var data = new FormData();
var request = new XMLHttpRequest();
data.append('file',blob);
request.open('post','/upload');
request.send(data);
console.log('File sent');
}
var configurationBuilder = new ConfigurationBuilder()
.SetBasePath(_baseConfigurationPath)
.AddJsonFile("appsettings.json", optional: true)
.AddEnvironmentVariables()
.Build();
BuildAgentMonitorConfiguration configuration = configurationBuilder.Get<BuildAgentMonitorConfiguration>();
具有以下结构:
appsettings.json
其中一些设置在Azure函数中配置为环境变量。一切都按预期进行:
现在的问题是在构建管道中配置其中一些变量,这些变量用于单元测试和集成测试中。我尝试过如下添加变量组并将其链接到管道:
但是没有设置环境变量,并且测试失败。我在这里想念什么?
答案 0 :(得分:0)
我也有相同的用例,我希望使用azure构建管道设置一些环境变量,以便测试用例可以访问该环境变量以使测试通过。 使用EXPORT直接设置env变量,ENV命令不适用于后续任务,因此要为后续任务设置环境变量应遵循https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch上提到的语法 即 带有脚本标记的task.set变量
使用构建管道设置ENV变量的正确方法
- script: |
echo '##vso[task.setvariable variable=LD_LIBRARY_PATH]$(Build.SourcesDirectory)/src/Projectname/bin/Release/netcoreapp2.0/x64'
displayName: set environment variable for subsequent steps
请注意空格,因为它是Yaml。上面的脚本标签将变量LD_LIBRARY_PATH(在Linux中用于定义.so文件的路径)设置为所定义的目录。
这种设置环境变量的样式也适用于后续任务,但是如果我们像下面提到的那样设置env变量,则将为特定的shell实例设置enviroment变量,而不适用于后续任务
设置环境变量的方式错误:
- script: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(Build.SourcesDirectory)/src/CorrectionLoop.HttpApi/bin/Release/netcoreapp2.0/x64
displayName: Set environment variable
您可以使用类似的语法来设置环境变量。
答案 1 :(得分:0)
从构建任务生成EF SQL脚本时,我也遇到了这个问题。根据{{3}},您在“变量”标签中定义的变量也将作为环境变量提供给流程。
请注意,变量也可以通过环境变量提供给脚本。使用这些环境变量的语法取决于脚本语言。名称为大写,。替换为_,并自动插入到流程环境中
对于我的实例,我只需要加载一个连接字符串,但是要处理json文件和环境之间键的大小写差异:
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.AddEnvironmentVariables()
.Build();
var connectionString = config["connectionString"] ?? config["CONNECTIONSTRING"];
答案 2 :(得分:0)
如果您正在使用 bash ,则它们的示例将无法正常工作,因为它们错误地引用了documentation中的变量。相反,它应该是:
#!/bin/bash
echo "##vso[task.setvariable variable=sauce]crushed tomatoes"
echo "##vso[task.setvariable variable=secret.Sauce;issecret=true]crushed tomatoes with garlic"
#!/bin/bash
echo "No problem reading $1 or $SAUCE"
echo "But I cannot read $SECRET_SAUCE"
echo "But I can read $2 (but the log is redacted so I do not spoil the secret)"
#!/bin/bash
echo "No problem reading $(sauce)"
echo "But I cannot read $(secret.Sauce)"