Как настроить переменные среды в конвейере Azure DevOps? - PullRequest
1 голос
/ 23 мая 2019

У меня есть функция Azure (.NET Core), настроенная на чтение параметров приложения как из файла JSON, так и из переменных среды:

var configurationBuilder = new ConfigurationBuilder()
                                .SetBasePath(_baseConfigurationPath)
                                .AddJsonFile("appsettings.json", optional: true)
                                .AddEnvironmentVariables()
                                .Build();

BuildAgentMonitorConfiguration configuration = configurationBuilder.Get<BuildAgentMonitorConfiguration>();

appsettings.json имеет следующую структуру:

{
  "ProjectBaseUrl": "https://my-project.visualstudio.com/",
  "ProjectName": "my-project",
  "AzureDevOpsPac": ".....",
  "SubscriptionId": "...",
  "AgentPool": {
    "PoolId": 38,
    "PoolName": "MyPool",
    "MinimumAgentCount": 2,
    "MaximumAgentCount": 10
  },
  "ContainerRegistry": {
    "Username": "mycontainer",
    "LoginServer": "mycontainer.azurecr.io",
    "Password": "..."
  },
  "ActiveDirectory": {
    "ClientId": "...",
    "TenantId": "...",
    "ClientSecret": "..."
  }
}

Некоторые из этих параметров настраиваются как переменные среды в функции Azure.Все работает как положено:

Azure Function application settings

Теперь проблема состоит в том, чтобы настроить некоторые из этих переменных в конвейере сборки, которые используются в модульных и интеграционных тестах.Я попытался добавить группу переменных следующим образом и связать ее с конвейером:

Azure DevOps Task Group

Но переменные среды не устанавливаются, и тесты выполняютсятерпит неудачу.Что мне здесь не хватает?

1 Ответ

0 голосов
/ 29 мая 2019

У меня также есть тот же вариант использования, в котором я хочу, чтобы некоторая переменная среды была настроена с помощью конвейера сборки Azure, чтобы тестовые примеры могли получить доступ к этой переменной среды, чтобы пройти тест.Непосредственно устанавливая переменную env с помощью команды EXPORT, команда 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, как указано ниже, переменная окружения будет установлена ​​для экземпляра оболочки specefic и не будет применяться для последующих задач

Неправильный способ установки переменной env:

- script: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(Build.SourcesDirectory)/src/CorrectionLoop.HttpApi/bin/Release/netcoreapp2.0/x64
  displayName: Set environment variable

Вы можете использовать аналогичный синтаксис для настройки переменной среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...