Azure Devops Трубопроводы с чистой Python окружающей средой - PullRequest
0 голосов
/ 11 марта 2020

У меня есть Azure сборка Devops CI, настроенная для запуска набора тестов на моей кодовой базе Python. Конвейер работает, используя локальный P C, сидящий на моем столе, который я добавил в пул сборки. Я установил Python 3.6 в папку _work\_tool агента сборки и запускаю файлы конвейера .yaml с задачей:

- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.6'

, которая захватывает Python 3.6 и использует ее для всех "python "команды на последующих этапах.

Все это прекрасно работает, но для запуска моих тестов пакеты в моем репозитории python должны быть установлены в среде python. Я делаю это, вызывая пользовательский скрипт, который вручную устанавливает пакеты один за другим (по сути, вызывает python setup.py install для каждого, что также включает внешние зависимости). Проблема в том, что я не уверен, что это каждый раз устанавливает пакеты в чистую среду, поэтому установка python может закончиться использованием пакетов из предыдущих заданий сборки.

Есть ли способ гарантировать, что каждый во время работы конвейера агент сборки использует для этого полностью чистую виртуальную среду Python?

1 Ответ

1 голос
/ 12 марта 2020

В yaml, когда вы запускаете конвейер на самом размещенном агенте, по умолчанию ни один из подкаталогов не очищается между двумя последовательными запусками. В результате вы можете выполнять инкрементные сборки и развертывания при условии, что для этого используются задачи. Вы можете изменить это поведение, используя параметр workspace в задании. За подробностями обращайтесь к этому документу .

- job: myJob
  workspace:
    clean: outputs | resources | all # what to clean up before the job runs
  • outputs: удалите Build.BinariesDirectory перед запуском нового задания.
  • resources: удалите Build.SourcesDirectory перед запуском нового задания.
  • all: Удалите весь каталог Pipeline.Workspace перед запуском нового задания.

Примечание: $(Build.ArtifactStagingDirectory) и $(Common.TestResultsDirectory) всегда удаляются и воссоздаются перед каждой сборкой независимо от какой-либо из этих настроек.

Как вы сказали в вопросе: «Я делаю это, вызывая пользовательский скрипт, который вручную устанавливает пакеты один за другим». Если ваши пакеты не установлены в каталоге рабочей области, опция clean не может удалить эти пакеты.

enter image description here

Итак, в качестве обходного пути вы можете очистите папку, в которую установлен пакет, с помощью cmd или скрипта. Например:

rmdir /s/q path\folderName
mkdir path\folderName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...