我们的构建管道主要包括构建和测试两个阶段。在测试阶段,管道与物理微控制器板通信。它不应该被多个作业并发使用,为了保持这一点,我们使用jenkins lockable resource plugin。我们现在正在将这些Jenkins作业转换到GitLab CICD,并且没有发现GitLab提供任何这样的功能。虽然不是直接的,我们认为我们可以实现这一目标的唯一替代方法是将每个runner与一个测试板强制耦合。如果有人知道如何在GitLab中实现这一目标,那就太好了。谢谢!
我们的构建管道主要包括构建和测试两个阶段。在测试阶段,管道与物理微控制器板通信。它不应该被多个作业并发使用,为了保持这一点,我们使用jenkins lockable resource plugin。我们现在正在将这些Jenkins作业转换到GitLab CICD,并且没有发现GitLab提供任何这样的功能。虽然不是直接的,我们认为我们可以实现这一目标的唯一替代方法是将每个runner与一个测试板强制耦合。如果有人知道如何在GitLab中实现这一目标,那就太好了。谢谢!
1条答案
按热度按时间ujv3wf0j1#
虽然不是直接的,但我们认为可以实现这一目标的唯一替代方法是将每个转轮与一个测试板强制耦合
如果你的资源(微控制器板)可能会在不同的GitLab项目中使用,这可能是最好的方法。
如果你只关心同一个GitLab项目中的作业/管道的资源锁定,你可以使用资源组来应用锁定机制,以确保任何时候只有一个作业可以获得资源锁。
需要锁定资源的作业将等待资源锁被释放(持有锁的作业完成),然后才能启动。
使用
resource_group
创建一个资源组,以确保同一项目的不同管道之间的作业是互斥的。例如,如果属于同一资源组的多个作业同时排队,则只有其中一个作业启动,其他作业等待,直到
resource_group
空闲。资源组的行为类似于其他编程语言中的信号量。
您可以为每个环境定义多个资源组。例如,在部署到物理设备时,您可能有多个物理设备。每个设备都可以部署到,但在任何给定时间,每个设备只能进行一次部署。