与托管代理进行扇出

时间:2019-08-12 17:41:39

标签: azure-pipelines

我有一个node.js项目,我想从当前的本地CI切换到Azure Pipelines。对于每一次其他提交,都需要进行一些广泛的测试,否则需要三个简单的步骤:

  1. npm installbuild用于主要项目以及测试工具(也是javascript)
  2. 运行该测试工具
  3. 汇总结果文件并合并为一个test-results.json

第二步大约需要一个小时,在最坏的情况下,我想利用Azure提供的这10个免费托管代理。
这应该很简单,至少在到目前为止我尝试过的CI系统上: 运行步骤1,为步骤2启动10个代理,一旦它们全部完成,就启动一个最终代理来收集结果。

鉴于Azure上似乎根本没有工作区持久性(真的吗?),我显然需要为所有12个代理签出git存储库12次或在步骤1中执行一次,然后打包整个东西,node_modules以及所有内容,然后将其作为工件发布,以供以下步骤再次下载和解压缩。
那不可能是正确的方法,对吗?

如果是这样,每个步骤中的一个管道和每个步骤中的一个管道之间是否有区别,还是只是出于口味问题? / p>

1 个答案:

答案 0 :(得分:0)

  

那不可能是正确的方法,对吗?

这种方法是可行的,但我不确定这是否是最佳方法。就像您说的那样,这只是口味问题。

要完成此任务,我们需要通过任务Publish build artifacts发布全部内容  到步骤2中的Azure管道,然后添加具有10个任务Download build artifacts的代理,以在步骤2中从每个代理下载全部内容。

但是挑战在于我们必须手动执行最新的代理程序,因为它不知道第二步中的10个代理程序何时结束。

通常,我们将对测试套件进行切片,然后并行运行测试以获取每个测试套件的结果:

查看文档Run tests in parallel for any test runner,了解更多详细信息。

  

如果是,则每个步骤的一条管道之间是否存在差异   在其中,每一步都有一个管道,或者仅仅是一个问题   味道?

答案是肯定的。当您在一个代理程序/机器中的每个步骤中使用一个管道时,我们不需要关心将资产转移到每个步骤中的情况。但是,如果您在每个步骤中使用一个管道,则将是一个挑战。同时,您还需要考虑代理之间的并发性和代理资源的使用。

因此,如果管道中的步骤花费的时间不长,我们建议您对其中的每个步骤使用一个管道。

希望这会有所帮助。