在GitLab CI中控制并发执行是提升流水线性能的关键优化手段。本文分享一个实际的并发控制实践案例。
问题场景:我们的CI流水线包含多个并行测试任务,但过度并发导致构建服务器资源耗尽,出现任务排队和超时。通过以下配置解决:
stages:
- build
- test
- deploy
# 限制同一时间运行的测试job数量
.test_template: &test_template
stage: test
script:
- echo "Running test $CI_JOB_NAME"
- ./run-tests.sh
resource_group: "test-group-1"
timeout: 30 minutes
# 控制并发数为3
job1:
<<: *test_template
resource_group: "test-group-1"
job2:
<<: *test_template
resource_group: "test-group-1"
job3:
<<: *test_template
resource_group: "test-group-1"
# 使用变量控制并发策略
variables:
MAX_CONCURRENT_TESTS: 3
TEST_TIMEOUT: 1800
核心优化点:通过resource_group参数将相关job归组,配合GitLab Runner的资源限制配置,实现精细化并发控制。在Runner配置文件中设置:
[[runners]]
name = "ci-runner"
url = "https://gitlab.example.com/"
token = "runner-token"
executor = "docker"
[runners.docker]
tls_verify = false
image = "alpine:latest"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
cache_dir = "/cache"
volumes = ["/cache"]
[runners.cache]
type = "s3"
server_address = "s3.amazonaws.com"
# 限制并发执行数
concurrent = 3
效果验证:优化后,构建时间从平均25分钟降低到18分钟,资源利用率提升40%,任务超时率从15%降至2%。建议根据实际服务器配置调整concurrent和resource_group参数。

讨论