如何在Azure DevOps管道中配置环境变量?

时间:2019-05-23 10:56:24

标签: .net-core azure-devops environment-variables azure-functions azure-pipelines

我有一个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函数中配置为环境变量。一切都按预期进行:

Azure Function application settings

现在的问题是在构建管道中配置其中一些变量,这些变量用于单元测试和集成测试中。我尝试过如下添加变量组并将其链接到管道:

Azure DevOps Task Group

但是没有设置环境变量,并且测试失败。我在这里想念什么?

3 个答案:

答案 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)"