首页 > 解决方案 > 具有干净 Python 环境的 Azure Devops Pipelines

问题描述

我有一个 Azure Devops CI 构建设置来在我的 Python 代码库上运行一组测试。管道使用我办公桌上的本地 PC 运行,我已将其添加到构建池中。我在构建代理的文件夹中安装了 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 虚拟环境?

标签: pythonazure-devops

解决方案


在 yaml 中,当您在自托管代理上运行管道时,默认情况下,不会在两次连续运行之间清理任何子目录。因此,您可以进行增量构建和部署,前提是实施任务以利用它。workspace您可以使用作业上的设置覆盖此行为。有关详细信息,请参阅本文档

- job: myJob
  workspace:
    clean: outputs | resources | all # what to clean up before the job runs
  • outputsBuild.BinariesDirectory:在运行新作业之前删除。
  • resourcesBuild.SourcesDirectory:在运行新作业之前删除。
  • allPipeline.Workspace:在运行新作业之前删除整个目录。

注意:无论这些设置如何,总是在每次构建之前删除和重新创建$(Build.ArtifactStagingDirectory)$(Common.TestResultsDirectory)

正如您在问题中所说:“我通过调用一个手动安装软件包的自定义脚本来做到这一点”。如果您的包未安装在工作区目录中,则该clean选项无法删除这些包。

在此处输入图像描述

因此,作为一种解决方法,您可以通过 cmd 或脚本清空安装包的文件夹。例如:

rmdir /s/q path\folderName
mkdir path\folderName

推荐阅读