Docker 使用LFTP gets的连续部署;";在大约10个文件之后

Docker 使用LFTP gets的连续部署;";在大约10个文件之后,docker,gitlab,gitlab-ci,gitlab-ci-runner,lftp,Docker,Gitlab,Gitlab Ci,Gitlab Ci Runner,Lftp,我正在使用GitLab Community Edition和GitLab runner CI设置,使用LFTP在服务器上部署(同步)一组JSON文件。然而,这项工作似乎每10个文件“冻结”几分钟。有时需要同步大约400个文件,这项工作就会崩溃,因为有时需要一个多小时才能完成。JSON文件都是1KB。源服务器和目标服务器都不应具有任何限制FTP速率的防火墙。两者都在OVH托管 在orer中执行以下LFTP命令以同步所有内容: lftp -v -c "set sftp:auto-confirm tr

我正在使用GitLab Community Edition和GitLab runner CI设置,使用LFTP在服务器上部署(同步)一组JSON文件。然而,这项工作似乎每10个文件“冻结”几分钟。有时需要同步大约400个文件,这项工作就会崩溃,因为有时需要一个多小时才能完成。JSON文件都是1KB。源服务器和目标服务器都不应具有任何限制FTP速率的防火墙。两者都在OVH托管

在orer中执行以下LFTP命令以同步所有内容:

lftp -v -c "set sftp:auto-confirm true; open sftp://$DEVELOPMENT_DEPLOY_USER:$DEVELOPMENT_DEPLOY_PASSWORD@$DEVELOPMENT_DEPLOY_HOST:$DEVELOPMENT_DEPLOY_PORT; mirror -Rev ./configuration_files configuration/configuration_files --exclude .* --exclude .*/ --include ./*.json"

作业在Docker中运行,使用容器部署所有内容。什么原因会导致这种情况?

您是否考虑过改用
rsync
?我敢肯定,您可以从文件的增量复制中获益,而不是每次都复制整个文件集。

对于来自谷歌的用户,我们的设置完全相同。在docker或某些其他CI中运行时,使LFTP停止挂起的方法您可以使用以下命令:

lftp -c "set net:timeout 5; set net:max-retries 2; set net:reconnect-interval-base 5; set ftp:ssl-force yes; set ftp:ssl-protect-data true; open -u $USERNAME,$PASSWORD $HOST; mirror dist / -Renv --parallel=10"
这可以做几件事:

  • 它使它不会永远等待或进入一个连续的循环 当它不能执行命令时。这应该会加快事情的发展

  • 确保我们正在使用SSL/TLS。如果你不需要这个,就把那些拿走 选项

  • 将一个文件夹同步到新位置。选项
    -Renv
    可以 请在此解释:


  • 最后,在gitlab CI中,我将作业设置为在失败时重试。这将启动一个新的docker实例,绕过任何打开的文件或连接限制。上面的LFTP命令将再次运行,但由于我们使用的是
    -n
    标志,如果没有成功,它将只移动到第一个作业中丢失的文件上。这使得所有的事情都顺利地进行了。您可以在此处阅读有关CI job retrys的更多信息:

    您是否找到了解决方案?我们有着完全相同的问题,幸运的是,我从来没有弄清楚是什么导致了这个问题。我认为作为一种解决方法,我将超时时间设置为1秒左右,这样可以完成工作@PhillipYeah,我通过将超时降低到非常低的值,然后还设置CI文件,以便在作业失败时重试作业,从而避免了此问题。这使得该项目得以完成。我将把我的解决方案粘贴到下面。非常感谢您的回答<代码>设置网络:超时5;设置净:最大重试次数2次;set-net:reconnect interval base 5解决了将大量数据上载到sftp服务器后lftp mirror命令“卡住”的问题(成功上载了包含许多大文件的目录,但未同步任何下游文件)。lftp在手动终止之前不会从进程列表中消失,可能是因为sftp在传输处于活动状态时关闭了连接(根据本文讨论:)。