TFS 2017构建定义如何从另一TFS实例获取TFVC源代码?
可行,但需要通过变通方案实现
你遇到的情况确实存在——TFS/Azure DevOps Server的构建定义默认没有直接的「Remote TFVC」选项来跨实例拉取代码,但我们可以通过以下几种方式满足需求:
方法1:用TF命令行工具在构建流程中拉取TFVC代码
这是最直接的临时解决方案,无需修改源码仓库结构:
- 在TFS1的构建定义中添加一个命令行任务,放在所有依赖源码的任务之前。
- 使用
tf命令创建临时工作区并拉取TFS2的代码,示例命令如下(务必用构建变量存储敏感信息,禁止硬编码账号密码):# 创建临时工作区 tf workspace /new /collection:http://tfs2-server:8080/tfs/YourTFS2Collection /login:$(TFS2Username),$(TFS2Password) TempBuildWorkspace # 拉取指定路径的代码 tf get "$/TFS2Project/Path/To/SourceCode" /recursive /login:$(TFS2Username),$(TFS2Password) - 构建完成后,建议添加清理任务删除临时工作区,避免残留:
tf workspace /delete /collection:http://tfs2-server:8080/tfs/YourTFS2Collection /login:$(TFS2Username),$(TFS2Password) TempBuildWorkspace - 注意事项:要确保TFS1的构建代理能访问TFS2的服务器端口,且使用的账号/PAT拥有TFS2对应TFVC路径的读取权限。
方法2:将TFS2的TFVC代码迁移到Git仓库(长期方案)
如果你的场景需要长期跨实例拉取代码,可以考虑把TFS2的TFVC仓库转为Git仓库:
- 在TFS2中创建一个新的Git仓库,然后用
tf git import命令导入TFVC的代码历史:tf git import "$/TFS2Project/TFVCRootPath" http://tfs2-server:8080/tfs/YourTFS2Collection/_git/TargetGitRepo /login:$(TFS2Username),$(TFS2Password) - 之后TFS1的构建定义就可以直接使用「Remote Git」选项拉取这个Git仓库的代码,这种方案更贴合现代构建流程,还能利用Git的分支管理优势。
方法3:配置跨集合信任(仅限同域/信任环境)
如果两个TFS实例处于同一个域或有双向信任的域环境中,可以尝试配置跨集合权限:
- 确保TFS1的服务账号拥有TFS2集合的源码读取权限。
- 在TFS1的构建定义中尝试直接添加TFS2的TFVC路径作为源码源(部分新版本Azure DevOps Server支持跨集合源码引用,但旧版TFS可能不生效)。不过这种方式兼容性不如前两种,建议优先尝试命令行方案。
内容的提问来源于stack exchange,提问作者Ulad Melekh
相关产品推荐
相关产品推荐

