GitLab CI Runner中使用lftp上传文件超时问题求助
排查GitLab CI Runner中lftp FTP连接超时问题
针对你遇到的lftp连接FTP服务器超时(Socket error (Operation timed out))问题,可按以下步骤逐一排查:
1. 验证Runner到FTP服务器的网络连通性
在Runner所在的执行环境中,先通过基础网络工具确认端口21是否可达:
- 使用telnet测试:
telnet 145.14.145.229 21 - 或者用nc工具(如果可用):
nc -zv 145.14.145.229 21
如果测试失败,说明是网络层面拦截:可能是Runner所在服务器的出站防火墙限制、目标FTP服务器的入站安全组/防火墙未开放21端口,或者两者之间的网络路由问题。
2. 切换为FTP被动模式
默认FTP主动模式在很多CI/CD环境中容易被防火墙阻断,尝试启用被动模式,修改lftp命令如下:
lftp -c "debug; set ftp:ssl-force true; set ssl:verify-certificate false; set ftp:passive-mode true; open -u $FTP_HOST_DEPLOY_USERNAME,$FTP_HOST_DEPLOY_PASSWORD $FTP_HOST_DEPLOY; mirror -Renv ./dist/app ./public_html"
被动模式下,数据连接由客户端主动发起,适配多数CI环境的网络规则。
3. 简化命令排查登录问题
先去掉mirror上传逻辑,仅测试FTP登录是否正常,排除上传参数的干扰:
lftp -c "debug; set ftp:ssl-force true; set ssl:verify-certificate false; open -u $FTP_HOST_DEPLOY_USERNAME,$FTP_HOST_DEPLOY_PASSWORD $FTP_HOST_DEPLOY; ls"
如果登录后能执行ls命令,说明连接本身正常,问题出在mirror参数或目标目录权限;如果仍超时,回到网络层面排查。
4. 确认FTP服务器的访问权限
检查目标FTP服务器是否将Runner的IP地址加入了允许列表,部分FTP服务会限制仅指定IP能访问。同时确认服务器的被动模式端口范围(通常是30000-31000这类区间)是否在防火墙中开放,被动模式需要这些端口用于数据传输。
5. 检查GitLab Runner的网络配置
如果使用的是GitLab托管Runner,确认Runner所在区域的网络能访问目标FTP服务器;如果是自托管Runner,检查服务器的出站规则,确保没有拦截到目标IP的21端口(及被动模式端口)的流量。
内容的提问来源于stack exchange,提问作者Fabrizio Manna
相关产品推荐
相关产品推荐

