如何在同一gitlab runner上禁用docker executor的并发作业?

oipij1gg  于 2023-04-29  发布在  Docker
关注(0)|答案(2)|浏览(162)

我正在使用gitlab community edition 14。4.1沿着一个版本14的gitlab runner。4.0.其配置如下:

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "My runner"
  limit = 1
  url = "https://my-gitlab-instance.com"
  token = "my-gitlab-token"
  executor = "docker"
  [runners.custom_build_dir]
    enabled = true
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "gitlab/dind:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/builds:/builds:rw", "/cache"]
    shm_size = 1000000000

特别注意这两个选项

concurrent = 1

[[runners]]
  limit = 1

现在,我有一个管道,其中一些阶段有多个作业。从上面的运行器配置中,我希望每个作业都将按顺序一个接一个地运行。然而,这些作业在同一个运行器上并发运行,导致大多数作业由于git锁而失败。
为什么会这样呢?我怎样才能真正禁用运行程序中的并发性?似乎禁用并发是我唯一的选择。实际上,我试图通过e.例如,在我的.gitlab-ci.yml中定义GIT_CLONE_PATH

variables:
  GIT_CLONE_PATH: ${CI_BUILDS_DIR}/${CI_CONCURRENT_ID}/${CI_PROJECT_NAME}

但这并不起作用,因为gitlab没有正确填充$CI_CONCURRENT_ID(无论发生什么,它总是0)。
增加跑步者的数量并不是解决办法,因为我仍然可以观察到同样的效果。有时,多个作业仍然会在同一时间在同一个运行器上运行。不可能没有变通办法,对吧?我该如何解决这个问题?
最后,我想使用多个runner,但当然是最多一个job / runner的分布,否则我的管道是不可靠的(i.e.它们可能会因为那些恼人的git锁错误而失败)。为了使其工作,我需要禁用runner中的并发性。

wtlkbnrh

wtlkbnrh1#

检查您没有运行两个gitlab_runner示例。
您应该会看到类似于以下内容的内容,但也可能会看到“verify”命令。

$ ps -ef | grep gitlab
  502   852     1   0 12:52pm ??         0:00.08 /path/to/gitlab-runner run --syslog
  502  1926   389   0 12:53pm ttys000    0:00.00 grep gitlab

参见:

9gm1akwq

9gm1akwq2#

如果你希望在一个阶段中一次运行一个作业,你可以使用resource groups选项。

job1:
 resource_group: team
 script:
   - echo "Hello"

job2:
 resource_group: team
 script:
   - echo "hai"

在这种情况下,job1将运行,只有在它完成后,另一个作业才会运行。

相关问题