Запуск конвейеров с средами 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 в системный путь

В размещенных агентах conda по умолчанию остается без PATH конфликтов со своей версией 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. Исправление см. на вкладке "Размещенная macOS" в разделе "Добавление conda в системный путь".

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

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

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

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

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

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