Gitlab 和 Rsync 错误地更新服务器文件

Gitlab 和 Rsync 错误地更新服务器文件

我不知道如何正确地表达这一点,因为我根本就不确定到底发生了什么。

我有一个正在使用 gitlab ci 更新的网站。今天尝试推送新代码时,我收到了一个错误。它非常不具描述性,并且与网站本身有关。这是一个 Drupal 网站,我试图安装一个自定义模块。

The module CustomModule cannot be installed because it's missing a dependency module

它为模块提供了一个完全空白的文件名。

经过一番挖掘,我终于找到了问题所在。不知何故,服务器收到了来自提交历史中两个不同点的文件。我之前没有将此分支推送到服务器。在服务器上,一些文件来自最新提交,而其他文件则来自该分支的第一个提交。

这听起来确实很奇怪,我同意。我注意到该网站告诉我,我正在推送的模块缺少依赖项,当我查看缺少的内容时,它列出了我没有列出的依赖项(毫无疑问,这完全是错误的)。

查看新文件后,我意识到有些文件来自较早的提交。它不只是抓取所有文件的较早版本,因为有些文件来自最新提交。我检查了作业,它列出了对 rsync 的调用中的所有文件。

rsync 调用如下:
rsync -av --no-perms --no-owner --no-group --exclude-from '.gitlabci-rsync-exclude.txt' --exclude '.git' --delete ./ $RSYNC_DESTINATION

更奇怪的是,在这件事发生前几分钟,同样的任务正在运行,以合并一些更新,并且一切顺利。然后,这个任务却导致任务失败。

我不知道我还能提供什么信息,因为我不太清楚发生了什么。您有什么想法或需要更多信息吗?

答案1

Rsync 可能有一些奇怪的副作用

通过创建(和存档) tar 文件,然后传输这些版本文件,然后解压它们,您可能会获得更多的运气。

在您的 .ci 文件中,tar 并存档具有相同排除的日期/时间/提交 ID 的 tar,然后 rsync 它。

相关内容