Запуск конвейеров с средами Anaconda
Azure DevOps Services
Узнайте, как настроить и использовать Anaconda с Python в конвейере. Anaconda — это распределение Python для обработки и анализа данных и машинного обучения.
Начать
Следуйте этим инструкциям, чтобы настроить конвейер для примера приложения Python с средой Anaconda.
Войдите в свою организацию Azure DevOps и откройте нужный проект.
В этом проекте перейдите к странице Pipelines (Конвейеры). Выберите действие создания конвейера сборки.
Пройдите через шаги мастера, выбрав GitHub в качестве расположения исходного кода.
Возможно, вам придется выполнить вход в GitHub. Для этого введите учетные данные GitHub.
Когда появится список репозиториев, выберите пример репозитория Anaconda.
Azure Pipelines анализирует код в репозитории и обнаруживает существующий
azure-pipelines.yml
файл.Выберите Выполнить.
Будет выполнен новый запуск. Дождитесь завершения задания.
Совет
Чтобы внести изменения в файл 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".