Запуск конвейеров с помощью сред Anaconda

Azure DevOps Services

Узнайте, как настроить и использовать Anaconda с Python в конвейере. Anaconda — это дистрибутив Python для обработки и анализа данных и машинного обучения.

Начало работы

Следуйте этим инструкциям, чтобы настроить конвейер для примера приложения Python в среде Anaconda.

  1. Войдите в свою организацию Azure DevOps и откройте нужный проект.

  2. В этом проекте перейдите к странице Pipelines (Конвейеры). Выберите действие создания конвейера сборки.

  3. Пройдите через шаги мастера, выбрав GitHub в качестве расположения исходного кода.

  4. Возможно, вам придется выполнить вход в GitHub. Для этого введите учетные данные GitHub.

  5. Когда появится список репозиториев, выберите пример репозитория Anaconda.

  6. Azure Pipelines проанализирует код в репозитории и обнаружит существующий azure-pipelines.yml файл.

  7. Выберите Запуск.

  8. Будет выполнен новый запуск. Дождитесь, пока он завершится.

Совет

Чтобы внести изменения в файл YAML, как описано в этом разделе, выберите конвейер на странице Конвейеры , а затем изменитеazure-pipelines.yml файл.

Добавление conda в системный путь

На размещенных агентахPATH conda по умолчанию не используется, чтобы ее версия Python не конфликтовала с другими установленными версиями. Команда task.prependpath агента сделает ее доступной для всех последующих шагов.

- bash: echo "##vso[task.prependpath]$CONDA/bin"
  displayName: Add conda to PATH

Создание среды

Из аргументов командной строки

Команда conda create создаст среду с аргументами, которые вы передаете.

- bash: conda create --yes --quiet --name myEnvironment
  displayName: Create Anaconda environment

Из YAML

Вы можете проверка в environment.yml файле репозитория, который определяет конфигурацию для среды Anaconda.

- script: conda env create --quiet --file environment.yml
  displayName: Create Anaconda environment

Примечание

Если вы используете локальный агент и не удаляете среду в конце, вы получите сообщение об ошибке в следующей сборке, так как среда уже существует. Для разрешения используйте --force аргумент : conda env create --quiet --force --file environment.yml.

Примечание

Если вы используете локальные агенты, которые совместно используют хранилище и параллельно выполняют задания в одних и тех же средах Anaconda, между этими средами могут возникнуть столкновения. Для разрешения используйте --name аргумент и уникальный идентификатор в качестве значения аргумента, например объединение с переменной сборки $(Build.BuildNumber) .

Установка пакетов из Anaconda

Следующий YAML устанавливает scipy пакет в среде conda с именем myEnvironment.

- bash: |
    source activate myEnvironment
    conda install --yes --quiet --name myEnvironment scipy
  displayName: Install Anaconda packages

Выполнение шагов конвейера в среде Anaconda

Примечание

Каждый шаг сборки выполняется в отдельном процессе. При активации среды Anaconda она будет изменять PATH и вносить другие изменения в текущий процесс. Поэтому среда Anaconda должна активироваться отдельно для каждого шага.

- bash: |
    source activate myEnvironment
    python -m pytest --junitxml=junit/unit-test.xml
  displayName: pytest

- task: PublishTestResults@2
  inputs:
    testResultsFiles: 'junit/*.xml'
  condition: succeededOrFailed()

Часто задаваемые вопросы

Почему появляется сообщение об ошибке "Отказано в разрешении"?

В размещенной системе macOS пользователь агента не имеет права владения каталогом, в котором установлен Miniconda. Сведения об исправлении см. на вкладке Hosted macOS в разделе Добавление conda в путь к системе.

Почему сборка перестает отвечать на conda create шаг или conda install ?

Если вы забудете пройти --yes, conda остановится и дождется взаимодействия с пользователем.

Почему сценарий в Windows останавливается после активации среды?

В Windows activate — это пакетный скрипт. Чтобы возобновить выполнение скрипта call после активации, необходимо использовать команду . См. примеры использования callв конвейере.

Как выполнить тесты с несколькими версиями Python?

См. статью Создание приложений Python в Azure Pipelines.