如何在Azure Pipelines中分离Python脚本的构建与发布管道?
拆分Azure Pipelines构建与部署管道的操作步骤
核心结论
必须在构建管道中生成制品,发布管道才能基于该制品执行部署操作——因为发布管道需要获取构建好的代码、依赖配置等文件,而制品是构建与发布之间的传递载体。
第一步:修改构建管道,添加制品发布流程
保留原构建逻辑(设置Python版本、安装依赖),新增打包代码与配置、发布制品的步骤,修改后的管道YAML如下:
trigger: none pool: vmImage: "windows-latest" steps: # 设置Python版本 - task: UsePythonVersion@0 displayName: Use Python 3.8 inputs: versionSpec: '3.8' addToPath: true # 安装依赖 - bash: pip3 install -r requirements.txt displayName: Install pip package requirements workingDirectory: project-requirements # 打包需要部署的文件(代码、依赖配置等) - task: ArchiveFiles@2 displayName: 'Package ETL files' inputs: rootFolderOrFile: '$(System.DefaultWorkingDirectory)' includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/etl-deploy-package.zip' replaceExistingArchive: true # 将打包文件发布为Azure Pipelines制品 - task: PublishBuildArtifacts@1 displayName: 'Publish deployment artifact' inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/etl-deploy-package.zip' ArtifactName: 'etl-artifact' publishLocation: 'Container'
说明:
ArchiveFiles@2会将项目根目录下的所有必要文件(src/scripts、project-requirements等)打包为zipPublishBuildArtifacts@1会将这个zip上传到Azure DevOps的制品库,供后续发布管道调用
第二步:创建独立的发布管道(Release Pipeline)
- 新建发布管道:在Azure DevOps中进入「发布」页面,点击「新建管道」,选择「空作业」模板。
- 关联构建制品:在「制品」区域点击「添加」,选择你修改后的构建管道作为源,选择刚才发布的
etl-artifact作为制品,设置别名(比如ETLArtifact)。 - 添加部署步骤:在发布阶段(默认Stage 1)中添加以下任务:
- 设置Python版本:添加
UsePythonVersion@0任务,配置为Python 3.8,与构建管道一致。 - 解压制品:添加
ExtractFiles@2任务,设置解压源为$(Pipeline.Workspace)/ETLArtifact/etl-deploy-package.zip,目标目录设为$(System.DefaultWorkingDirectory)/extracted。 - 安装依赖:添加Bash任务,运行
pip3 install -r requirements.txt,工作目录设置为$(System.DefaultWorkingDirectory)/extracted/project-requirements。 - 执行部署脚本:添加
AzureCLI@2任务,配置与原管道一致,工作目录设为$(System.DefaultWorkingDirectory)/extracted/src/scripts,内联脚本为python etl.py。
- 设置Python版本:添加
关键注意事项
- 发布管道的Python版本必须与构建管道一致,避免依赖兼容问题。
- 不要依赖构建管道中安装到Agent的依赖包——因为构建与发布使用的Agent环境是隔离的,必须在发布阶段重新安装依赖。
- 可以给发布管道添加多阶段(如测试、生产),复用同一个构建制品,保证不同环境的部署一致性。
内容的提问来源于stack exchange,提问作者user19975572
相关产品推荐
相关产品推荐

