我有两个存储库 - 一个在TFVC中,另一个在Git中。将它们分开有特定的技术原因。
TFVC中的代码构建在私有构建代理上,Git中的代码构建在托管代理上。所以目前我有两个独立的构建,它们的结果在发布定义中一起部署。
我正在研究创建可能从两个存储库获取源代码的构建,以便我有一个要管理的构建定义。
有没有办法实现这个目标?
答案 0 :(得分:10)
目前,无法在“获取源”步骤中指定多个存储库。 并且有一个用户语音Allow TFS build to depend on multiple repositories,它建议了类似功能,您可以投票和跟进。
现在的解决方法是手动从其他仓库获取文件。
例如,如果在“获取源”步骤中指定TFVC repo,则可以在任务开头添加 PowerShell任务,并通过var csv = require('fast-csv');
var fs = require('fs-extra');
var mv = require('mv');
var stream = fs.createReadStream('./Attachment.csv')
.pipe(csv({
headers: true
}))
.on('data', function(data) {
var dir = './' + data.ParentId + '/';
var dir1 = './' + data.ParentId + '/' + data.Id + '/';
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
}
if (!fs.existsSync(dir1)) {
fs.mkdirSync(dir1);
}
var oldPath = './Attachments/' + data.Id;
var newPath = dir1 + data.Id;
fs.move(oldPath, newPath, err => {
if (err) return console.error(err);
console.log('success!');
});
});
等克隆其他git仓库
答案 1 :(得分:5)
而Marina的回答也是可能的。在默认情况下将构建定义绑定到Git之后,您可以添加powershell脚本来映射工作区并获取源:
tf workspace /new /noprompt /location:local /permission:private <name>
tf workfold /map $/Server/Path "$(Agent.BuildDirectory)\tfvc" /workspace:<name>
tf get "$(Agent.BuildDirectory)\tfvc"
并添加一个&#34;始终运行的任务&#34;之后清理工作区:
tf workspace /delete <name>
rd /s /q "$(Agent.BuildDirectory)\tfvc"
另一种选择是使用Download Artefact任务从以下扩展名下载工件:TFS Artifacts for Release Management。
或者VSTS附带的下载工件任务,虽然需要链接到要从中下载的构建定义,这意味着您可以在构建源的Git或TFVC上构建CI,或者只是附加源目录,然后获取&#34;其他&#34;建立。
答案 2 :(得分:3)
你真的想同时构建两个repos并将构建工件混合在一起吗?或者您只是想使用相同的定义来定位不同的来源?
如果你真的想要第一个,你可以在构建过程中编写源代码的脚本,正如其他答案所指出的那样。但是,如果在托管和私有TFVC上构建Git是一项艰难的要求,那么同时构建这两组源将会失败。
我建议您使用共同的任务创建Task Group。然后创建引用任务组的单独构建定义。