如何创建可同时获取TFVC与Git源的VSTS单一构建定义?
Absolutely, you can combine both your TFVC and Git repositories into a single build definition—here are practical, step-by-step approaches tailored to your scenario:
方法1:直接在构建定义中添加多仓库源
Azure DevOps (assuming you're using this, given your mention of build agents and release definitions) natively supports adding multiple repository sources to a single build definition, regardless of whether they're Git or TFVC. Here's how to set it up:
编辑构建定义的"获取源"部分:
- 打开你的构建定义,进入获取源标签页。
- 点击添加按钮,根据需要添加的仓库类型选择
Git或TFVC。 - 对于Git仓库:选择对应的项目、仓库、目标分支,并设置一个专属本地路径(比如
$(Build.SourcesDirectory)/GitCode),避免和TFVC的文件产生覆盖冲突。 - 对于TFVC仓库:指定服务器路径,通过工作区映射将其指向一个独立的本地目录(比如
$(Build.SourcesDirectory)/TFVCCode)。
为任务单独配置代理池:
由于TFVC构建需要私有代理、Git构建使用托管代理,你不需要为整个构建设置全局代理池。反而可以:- 处理TFVC代码的任务(比如编译TFVC项目):进入任务的代理作业设置,选择你的私有代理池。
- 处理Git代码的任务:将代理作业设置为使用托管代理池。
方法2:用脚本任务拉取第二个仓库
如果你更倾向于以其中一个仓库作为主源,可以添加脚本任务按需拉取第二个仓库,同时搭配代理池定向:
示例:在托管代理构建中拉取TFVC代码:
- 将构建定义的主源设置为Git(使用托管代理池)。
- 添加一个PowerShell或命令行任务,配置为在私有代理池上运行(因为托管代理没有预装
tf.exe,而TFVC操作需要这个工具)。 - 使用
tf.exe命令将TFVC仓库克隆到专属目录:tf workspace /new /collection:https://dev.azure.com/你的组织/你的项目 /permission:Private /login:你的用户名,你的PAT令牌 tf workfold /map $/你的TFVC服务器路径 $(Build.SourcesDirectory)/TFVCCode tf get /recursive /force
提示:替换占位符为你的实际组织/项目信息,PAT令牌需要具备足够的仓库访问权限。
反向场景:在私有代理构建中拉取Git代码:
在私有代理作业中添加Git克隆任务(或脚本),使用标准Git命令:git clone https://你的PAT令牌@dev.azure.com/你的组织/你的项目/_git/你的Git仓库 $(Build.SourcesDirectory)/GitCode
关键注意事项
- 目录隔离:务必将每个仓库映射到唯一的本地目录,防止文件覆盖和构建冲突。
- 代理依赖:确保你的私有代理已安装TFVC命令行工具(
tf.exe,通常随Visual Studio或Team Explorer一起安装)。托管代理不包含该工具,因此TFVC操作必须在私有代理上运行。 - 构建顺序:调整任务顺序,确保两个仓库都拉取完成后,再执行编译或打包步骤。必要时可以使用任务依赖来强制执行顺序。
- 多阶段构建:如果想要更清晰的分离,可以使用多阶段构建:
- 阶段1:使用托管代理拉取并构建Git代码,发布工件。
- 阶段2:使用私有代理拉取并构建TFVC代码,发布工件。
- 最终阶段收集所有工件用于部署。
这些方案都能让你在单一构建定义中管理两个仓库,同时仍为每个仓库使用合适的代理类型。
内容的提问来源于stack exchange,提问作者Kangkan

