如何使用YAML实现Azure DevOps不同项目间的文件拷贝
Azure DevOps跨项目拷贝文件YAML配置方案
前置要求
- 管道使用的服务账号对两个项目的对应仓库均开通读取权限,如果需要直接写入目标usecase_04仓库,还需要开通贡献者权限
- 若两个项目属于不同Azure DevOps组织,需要提前创建跨组织服务连接
方案1:在usecase_04项目的管道中直接操作(推荐)
直接在目标项目管道中同时拉取两个仓库的代码,完成文件拷贝后直接提交到目标仓库,流程更简洁。
1. 配置多仓库检出
在管道YAML顶部添加资源声明,同时拉取两个项目的仓库:
resources: repositories: - repository: project_management_repo type: git name: project_management/你的project_management仓库名 # 格式:项目名/仓库名 ref: main # 要拉取的源仓库分支
2. 复制指定文件夹内容
基于你提供的CopyFiles@2任务调整参数即可:
task: CopyFiles@2 inputs: SourceFolder: '$(Build.SourcesDirectory)/project_management_repo/Guidelines' # 源项目指定文件夹路径 Contents: '**' # 匹配该文件夹下所有内容 TargetFolder: '$(Build.SourcesDirectory)/usecase_04/wiki' # 目标项目的目标存储路径 OverWrite: true # 存在同名文件时直接覆盖
3. 提交更改到目标仓库
添加命令行任务把拷贝的文件提交到usecase_04的仓库:
task: CmdLine@2 inputs: script: | git config user.name "管道服务账号名称" git config user.email "服务账号绑定邮箱" git add . git commit -m "同步project_management的Guidelines文件夹内容" git push origin $(Build.SourceBranchName) workingDirectory: $(Build.SourcesDirectory)
方案2:在project_management项目管道中发布构件同步
如果不想在目标项目配置多仓库检出,可通过构件中转实现同步:
第一步:在project_management的管道中发布指定文件夹为构件
基于你提供的两个任务调整后如下:
# 复制文件到构件暂存目录 task: CopyFiles@2 inputs: SourceFolder: '$(Build.Repository.LocalPath)/Guidelines' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/Guidelines' # 发布构件 task: PublishBuildArtifacts@1 inputs: pathToPublish: '$(Build.ArtifactStagingDirectory)/Guidelines' artifactName: 'project-guidelines' publishLocation: 'Container' # 存储到Azure DevOps服务器
第二步:在usecase_04的管道中下载构件并提交
添加下载构件、复制、提交的任务即可:
# 跨项目下载构件 task: DownloadBuildArtifacts@1 inputs: buildType: 'specific' project: 'project_management' # 源项目名 definition: 'project_management对应的管道名' # 源项目发布构件的管道名称 buildVersionToDownload: 'latest' artifactName: 'project-guidelines' downloadPath: '$(Build.ArtifactStagingDirectory)' # 复制到目标路径 task: CopyFiles@2 inputs: SourceFolder: '$(Build.ArtifactStagingDirectory)/project-guidelines' Contents: '**' TargetFolder: '$(Build.SourcesDirectory)/wiki' OverWrite: true # 提交到仓库的命令和方案1完全一致
注意事项
- 所有路径参数请根据你实际的仓库目录结构调整,避免路径不匹配报错
- 如果目标分支配置了分支策略,需要给管道服务账号开通「跳过分支策略」权限,或者调整流程用提交PR的方式合并更改
- 如果需要触发同步逻辑时自动运行管道,可添加定时触发或者源仓库代码更新触发的配置
内容的提问来源于stack exchange,提问作者Mr_Unchained
相关产品推荐
相关产品推荐

