【问题标题】:Make sure, pipelines run sequential in gitlab确保管道在 gitlab 中按顺序运行
【发布时间】:2022-09-26 09:45:17
【问题描述】:

当然,我知道,如果这些作业指向单个跑步者,那么单个作业会按顺序 FIFO 运行,所以他们喜欢等待。

那也行。

对于我们一次只能部署和测试一个版本的测试环境,我们不仅需要查询单个作业,还需要查询整个管道。

需要明确的是:如果我们有 Job_DeployJob_Test 是管道的一部分 Pipeline,我们需要等待整个管道完成。

到目前为止,我们有这样的场景,序列可能不按顺序排列:

Job_Deploy1Job_Deploy2Job_Test2Job_Test1可能是这样。

但是我们需要它严格的FIFO

Pipeline1(Job_Deploy1, Job_Test1), Pipeline(Job_Deploy2, Job_Test2)

我们怎样才能做到这一点?

为什么我们似乎只有这个要求?我们在这里有什么错误的认识吗?这是最佳实践吗?如果不是:为什么?

此致

  • 你能展示你的 gitlab-ci.yaml 代码吗?

标签: gitlab gitlab-ci gitlab-ci-runner cicd gitlab-ce


【解决方案1】:

试试Edit an existing resource groupprocess_mode oldest_first

https://docs.gitlab.com/ee/api/resource_groups.html#edit-an-existing-resource-group

【讨论】:

    【解决方案2】:

    好像我误读了这个问题,我最初的答案不适用,我把它放在最后。


    正确答案:

    使用 resource_group 创建一个资源组,以确保同一项目的不同管道之间的作业是互斥的。

    有所谓的resource_groups,您可以使用它来强制执行某个命令。并确保作业仅在彼此之后运行,即使它们位于不同的管道中。

    https://docs.gitlab.com/ee/ci/yaml/#resource_group


    错误的答案:

    您正在寻找的是 needs 指令。

    它为您提供了在 ci 文件中表达工作依赖关系的可能性。

    就像是

    deploy1:
      script: echo "deploy 1"
    
    test1:
      script: echo "test 1"
      needs:
        - deploy1
    

    这意味着test1即使在同一阶段,只要deploy1完成,就不会开始。此外,您还可以将needs: [] 添加到deploy1 以立即启动它,即使它处于后期阶段。 needs 功能强大,可让您在舞台边界之外工作。

    看看https://docs.gitlab.com/ee/ci/yaml/#needs

    【讨论】:

    • 嘿,谢谢你的回答。抱歉回复晚了。这似乎不是解决方案。问题是:它解决了 PipeA.JobX 永远不会与 PipeB.JobX 并行运行,这是正确的。但它不能保证: PipeB.JobX 等待 PipeA 完成 JobX,而不是 JobY 和 JobZ,不是吗?
    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 2023-03-09
    • 2022-01-20
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多