![Gitlab 和 Rsync 错误地更新服务器文件](https://linux22.com/image/1624626/Gitlab%20%E5%92%8C%20Rsync%20%E9%94%99%E8%AF%AF%E5%9C%B0%E6%9B%B4%E6%96%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%96%87%E4%BB%B6.png)
我不知道如何正确地表达这一点,因为我根本就不确定到底发生了什么。
我有一个正在使用 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 它。