我正在使用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中的并发性。
2条答案
按热度按时间wtlkbnrh1#
检查您没有运行两个gitlab_runner示例。
您应该会看到类似于以下内容的内容,但也可能会看到“verify”命令。
参见:
9gm1akwq2#
如果你希望在一个阶段中一次运行一个作业,你可以使用resource groups选项。
在这种情况下,job1将运行,只有在它完成后,另一个作业才会运行。