Gitlab-CI作业可以通过编程生成吗?

时间:2019-09-09 11:06:01

标签: gitlab yaml gitlab-ci gitlab-ci-runner

我正在尝试找出将大量CI工作分解为可行细分的最佳方法。

  • 我有一个代码库,其中包含一组不断增长的文件(通常带有注明日期的文件名),当前为455。
  • 我的CI管道需要在这些文件中的每一个上运行12个操作,其中大多数可以并发操作(第一个和最后一个是唯一的,它们之间的10个可以并行运行。
  • 根据机器的不同,每次跑步大约需要3–8分钟。
  • makefile了解依赖关系以及何时需要构建什么。并非每次提交都需要运行所有可能的作业。使用-j运行多个作业即使在单台机器上也可以提高结果的速度,但是因为它可以一次计算出所有内容,所以无法按运行者分解整个项目。
  • 更改可能只影响一个文件(在这种情况下,只需执行少量操作,一个运行者就可以在大约半小时内完成这些操作),或者更改可能会影响到所有源文件,其中这种情况大约需要2周的处理时间才能更新所有内容。 makefile再次理解了这一点,可以用来生成需要运行的作业列表。

我有六名参赛者,所以我可以将“作品”的总运行时间减少到不到3天。显然,这是理想的结果。

我不知道如何使用Gitlab-CI配置来拆分作业。我可以创建按操作分组的新make目标,因此我可以在整个源文件集中进行10个作业,每个作业运行10个作业,但是事实证明,使用运行程序效率很低。它将运行器束缚数天以阻止其他工作,如果任何一项任务失败,则批量运行将失败,并且在比其他运行器更快或更慢的运行器之间无法很好地实现负载平衡。

由于文件集不断扩展,因此对每个源文件的作业进行硬编码似乎没有意义。有没有一种方法可以设置YAML配置,以便每个源文件每个动作生成1个作业?我真的不希望在每次提交时生成4550个工作,只是偶尔需要它们。通常只影响两个来源,因此理想的做法是先运行作业以列出要运行的作业。

0 个答案:

没有答案