Azure DevOps管道前置任务生成文件无法复制发布问题
问题根因
两个核心配置错误导致文件复制、发布流程失效:
- 生成文件路径与复制任务扫描路径不匹配:Python脚本通过相对路径生成Excel文件时,PythonScript@0任务的默认执行工作目录为
$(Build.SourcesDirectory)(管道拉取代码的根目录),生成的xlsx文件直接存放在源码根目录;但CopyFiles@2任务配置的复制规则为_buildOutput/**,仅匹配_buildOutput文件夹下的所有内容,完全扫描不到生成的Excel文件,因此无文件可复制。 - 路径配置缺少显式约束:CopyFiles@2任务未显式配置源目录参数,且当前流程中没有提前创建
_buildOutput目录的步骤,即便后续调整脚本写入该目录,也会因为目录不存在触发写入错误,进一步导致文件丢失。
修复方案
根据使用场景二选一即可:
- 方案1(无需修改Python代码,快速修复):调整CopyFiles@2任务配置,显式指定源目录,同时把根目录下的xlsx文件加入复制匹配规则:
- task: CopyFiles@2 inputs: SourceFolder: '$(Build.SourcesDirectory)' contents: | _buildOutput/** *.xlsx targetFolder: $(Build.ArtifactStagingDirectory)
- 方案2(路径管理更规范,生产环境推荐):调整Python代码,先创建目标输出目录再将Excel写入
_buildOutput路径,无需修改原有复制任务配置:
import os def create_excel(): ... # 提前创建输出目录,目录已存在时不报错 os.makedirs("_buildOutput", exist_ok=True) # 将Excel文件写入指定输出目录 return rn_df.to_excel(fr'_buildOutput/rn{rel_ver}.xlsx', sheet_name=f"RN {rel_ver}", index=False)
- 辅助排查手段:如果调整后仍找不到文件,可以在复制任务前增加命令行任务,扫描所有xlsx文件的实际存放位置,根据实际路径调整配置即可:
- task: CmdLine@2 inputs: script: | # Windows构建代理执行以下命令 dir /s /b *.xlsx # Linux/macOS构建代理注释上面的命令,执行下面的命令 # find $(Build.SourcesDirectory) -name "*.xlsx"
内容的提问来源于stack exchange,提问作者Spring
相关产品推荐
相关产品推荐

