Сбой активного конда в Azure DevOps конвейере - PullRequest
0 голосов
/ 17 апреля 2020

Тестирование конвейера azure devops в python сборке проекта с помощью conda

jobs:
  - job: pre_build_setup
    displayName: Pre Build Setup
    pool:
      vmImage: 'ubuntu-18.04'
    steps:
      - bash: echo "##vso[task.prependpath]$CONDA/bin"
        displayName: Add conda to PATH

  - job: build_environment
    displayName: Build Environment
    dependsOn: pre_build_setup
    steps:
      - script: conda env create --file environment.yml --name build_env
        displayName: Create Anaconda environment
      - script: conda env list
        displayName:  environment installation verification

  - job: unit_tests
    displayName: Unit Tests
    dependsOn: build_environment
    strategy:
      maxParallel: 2
    steps:
      - bash: conda activate build_env

Последний шаг - bash: conda activate build_env завершается неудачно со следующей ошибкой

Script contents:
conda activate build_env
========================== Starting Command Output ===========================
/bin/bash --noprofile --norc /home/vsts/work/_temp/d5af1b5c-9135-4984-ab16-72b82c91c329.sh

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run

    $ conda init <SHELL_NAME>

Currently supported shells are:
  - bash
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell

See 'conda init --help' for more information and options.

IMPORTANT: You may need to close and restart your shell after running 'conda init'.


##[error]Bash exited with code '1'.
Finishing: Bash

Как я могу активный Конда? кажется, что путь неправильный, поэтому он не может найти conda.

1 Ответ

1 голос
/ 20 апреля 2020

CommandNotFoundError: Ваша оболочка не была правильно сконфигурирована для использования 'conda activ'.

Здесь проблема заключается в том, что ваш скрипт выполняется в под-оболочке, но conda имеет не были инициализированы в этой под-оболочке.

Вам необходимо изменить активный скрипт на:

steps:
  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
        eval "$(conda shell.bash hook)"
        conda activate build_env
    displayName: Active

Кроме того, не разделяйте Add PATH, create environment и active the environment на разные должности.

Для Azure конвейера devops agent job является базовой c единицей процесса выполнения конвейера, и каждое задание агента имеет свою собственную независимую среду выполнения и рабочий лог c.

Для более подробной информации вы использовали Размещенный агент для применения ваших сценариев в этом сценарии проблемы.

Пока запускается одно задание агента, наша система пула назначит ВМ для этого задания агента. И эта виртуальная машина будет переработана назад после завершения работы агента. Когда будет запущено следующее задание агента, совершенно новая виртуальная машина будет случайным образом переназначаться.

dependsOn может только обмениваться файлами и передавать переменные между заданиями. Он не может продолжать работу виртуальной машины в следующей работе.

Я полагаю, что вы сможете угадать, с какой проблемой вы столкнетесь. Да, даже если вам удастся применить этот сценарий activate, вы продолжите сталкиваться с другим error: Could not find conda environment: build_env. Это связано с тем, что среда, используемая этим сценарием activate, - это совершенно новая vm , виртуальная машина, на которой использовалось предыдущее задание build_environment, была переработана системой.

Итак, не разделяйте среду создания и не активируйте на 2 задания агента:

  - job: build_environment
    displayName: Build Environment
    dependsOn: pre_build_setup
    steps:
      - script: conda env create --file environment.yml --name build_env
        displayName: Create Anaconda environment
      - script: conda env list
        displayName:  environment installation verification
      - task: Bash@3
        inputs:
          targetType: 'inline'
          script: |
            eval "$(conda shell.bash hook)"
            conda activate build_env
        displayName: Active
...