GitLab Runner连接超时问题的解决方案

133次阅读
没有评论

问题描述

在使用GitLab Runner执行流水线时遇到连接超时的问题。用户已经以sudo身份注册了Runner,但在流水线中仍然遇到了连接问题。以下是用户在流水线中遇到的错误信息:

Getting source from Git repository
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /builds/sachith/awesome-project/.git/
fatal: unable to access 'https://gitlab.example.com:9000/sachith/awesome-project.git/':
Failed to connect to gitlab.example.com port 9000 after 132262 ms: Operation timed out
Cleaning up project directory and file based variables
ERROR: Job failed: exit code 1

用户已确认在执行Runner的节点上,使用gitlab-runner用户可以克隆项目,因此排除了连接问题。同时,用户已经将gitlab-runner用户添加到了visudo文件中:gitlab-runner ALL=(ALL:ALL) ALL

用户还提供了一些其他的细节:
1. 在执行Runner的节点上,通过telnet测试可以连接到GitLab服务器的9000端口。
2. 使用gitlab-runner用户可以成功克隆项目。
3. 在Runner和GitLab服务器之间的tcpdump显示了一些TLS通信信息。
4. 提供了Runner的配置文件/etc/gitlab-runner/config.toml的内容。

解决方案

在解决此问题之前,请确保已经备份了相关的配置文件和数据。

检查网络连接和防火墙设置

根据问题的描述,错误信息表明Runner无法连接到GitLab服务器的9000端口。首先,需要检查网络连接以及防火墙设置,确保在执行Runner的节点和GitLab服务器之间的通信没有被阻止。确保TCP端口9000是开放的,并且没有防火墙规则阻止了连接。

更新GitLab Runner配置文件

根据提供的信息,可以尝试更新GitLab Runner的配置文件,以便更好地适应TLS通信。以下是可能的更改:

在配置文件 /etc/gitlab-runner/config.toml 中,进入 [runners.docker] 部分,并添加 privileged = true 条目,以确保在Docker执行器中具有足够的权限。这可能有助于解决一些与Docker执行器相关的错误。

[[runners]]
name = "Gitlab runner for My Project"
url = "https://gitlab.example.com:9000/"
token = "uWg-xxxxxxx"
tls-ca-file = "/etc/gitlab-runner/certs/gitlab.example.com.crt"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
  [runners.cache.s3]
  [runners.cache.gcs]
  [runners.cache.azure]
[runners.docker]
  tls_verify = false
  image = "docker"
  privileged = true   # 添加这一行
  disable_entrypoint_overwrite = false
  oom_kill_disable = false
  disable_cache = false
  volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
  shm_size = 0

检查TLS版本兼容性

根据用户提供的信息,Runner使用了TLS 1.3,而GitLab服务器使用了TLS 1.2。在配置文件中已经指定了TLS证书文件,但由于TLS版本差异可能会引起连接问题,可以尝试在配置文件中添加以下内容,强制指定使用TLS 1.2:

[runners.docker]
# 其他配置...
environment = ["GIT_SSL_VERSION=1.2"]  # 添加这一行

进行排查和调试

如果上述步骤仍未解决问题,建议进行以下排查和调试步骤:
1. 在执行Runner的节点上,使用curl或wget尝试通过HTTPS连接到GitLab服务器的9000端口,以确保能够建立连接。
2. 检查GitLab服务器的日志,查看是否有关于连接问题的错误信息。
3. 尝试在不同的网络环境下运行Runner,以确定是否与特定网络有关。

请注意,根据问题的具体情况,上述解决方案中的步骤可能需要根据实际情况进行适当的调整和修改。在操作之前,请务必备份相关的配置文件和数据,以防止意外情况发生。

参考链接

请注意,以上解决方案仅供参考,具体操作可能会因实际情况而异。在执行任何更改之前,请务必充分了解操作的影响并做好备份。如果问题仍然存在,请考虑查阅GitLab官方文档或寻求专业支持。

正文完