自建GitLab创建Tag触发Pipeline时lftp步骤卡住求助
GitLab CI Tag触发Pipeline时lftp卡住的排查方案
可能的原因及对应解决步骤
1. 日志输出过多导致缓冲区阻塞
Tag触发时如果文件变更较多,--verbose参数会输出大量日志,可能导致GitLab CI的日志缓冲区溢出,进程卡住。
- 解决:将lftp命令中的
--verbose替换为--silent,减少输出:lftp -e "set sftp:auto-confirm yes; mirror --reverse --silent --delete . karlanton/stage; quit" -u $FTP_USERNAME,$FTP_PASSWORD sftp://ssh.strato.de -p 22
2. 大文件传输超时
Tag对应的提交如果包含未在分支push中出现的大媒体文件,传输过程可能因网络或服务器限制卡住。
- 解决:
- 先临时移除Tag提交中的大文件,重新触发Pipeline验证是否恢复正常;
- 若确认是大文件问题,可添加传输超时参数调整lftp行为:
lftp -e "set net:timeout 30; set net:max-retries 2; set sftp:auto-confirm yes; mirror --reverse --verbose --delete . karlanton/stage; quit" -u $FTP_USERNAME,$FTP_PASSWORD sftp://ssh.strato.de -p 22
3. SSH连接或权限问题
Tag触发的Pipeline可能使用不同的GitLab Runner,网络环境或权限配置与分支push时不同,导致SFTP连接卡住。
- 解决:
- 添加SSH调试参数,查看连接细节:
通过日志判断是卡在认证、文件列表拉取还是文件传输阶段;lftp -e "set sftp:connect-program 'ssh -v'; set sftp:auto-confirm yes; mirror --reverse --verbose --delete . karlanton/stage; quit" -u $FTP_USERNAME,$FTP_PASSWORD sftp://ssh.strato.de -p 22 - 确认Tag触发的Pipeline使用的Runner与分支push时一致,检查Runner的网络是否能正常访问
ssh.strato.de。
- 添加SSH调试参数,查看连接细节:
4. GitLab CI Job超时设置过长
默认GitLab CI Job超时可能长达1小时,导致卡住的进程未被及时终止,无法看到日志断点。
- 解决:在任务中添加超时配置,快速定位断点:
deploy_stage: image: node:18 stage: deploy timeout: 10 minutes script: - apt-get update -qq && apt-get install -y -qq lftp - lftp -e "set sftp:auto-confirm yes; mirror --reverse --verbose --delete . karlanton/stage; quit" -u $FTP_USERNAME,$FTP_PASSWORD sftp://ssh.strato.de -p 22
内容的提问来源于stack exchange,提问作者Feldmanovitch
相关产品推荐
相关产品推荐

