VSTS从多个存储库构建

时间:2018-03-30 09:16:27

标签: git azure-devops azure-pipelines tfvc

我有两个存储库 - 一个在TFVC中,另一个在Git中。将它们分开有特定的技术原因。

TFVC中的代码构建在私有构建代理上,Git中的代码构建在托管代理上。所以目前我有两个独立的构建,它们的结果在发布定义中一起部署。

我正在研究创建可能从两个存储库获取源代码的构建,以便我有一个要管理的构建定义。

有没有办法实现这个目标?

3 个答案:

答案 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)

TFVC

而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。然后创建引用任务组的单独构建定义。