使用 rsync 与 gitlab-ci.yml 同步 Wordpress 主题文件夹

Use rsync with gitlab-ci.yml to sync Wordpress theme folders

在尝试使用 .gitlab-ci.yml 将我的主题自动部署到我的生产服务器时,我收到一个错误:

执行的命令:使用ubuntu:16.04图像

$ apt update -y && apt install openssh-client sshpass rsync -y
$ rsync -avh --progress --delete --rsh="sshpass -p $STAGE_FTP_PASS ssh -o StrictHostKeyChecking=no " --exclude=.git ./ $STAGE_FTP_USER@my.wp.address/project-folder/wp-content/themes/sg-coesfeld-theme/

错误结果:

sshpass: invalid option -- 'o'
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(176) [sender=3.1.1]
ERROR: Job failed: exit code 1

我正在使用完全相同的 .gitlab-ci.yml、服务器、FTP 帐户、运行器和 gitlab 托管成功地在其他 git 存储库中自动部署。

唯一改变的是源 git 存储库和 /project-folder/

老实说,我不知道从哪里开始以及如何追踪这个问题,所以我很高兴收到任何建议。

您的 $STAGE_FTP_PASS 必须为空,因此命令将变为

sshpass -p ssh -o StrictHostKeyChecking=no 

所以sshpass会认为-p ssh是密码,-o StrictHostKeyChecking=no是命令。

正如@pynexj 已经说过的,$STAGE_FTP_PASS 是一个空字符串,这导致了错误。我已经在我的脚本中使用 echo $STAGE_FTP_USER 进行了尝试。

在插入秘密变量时,我选中了 [X] 受保护 框,其中附有解释:此变量将仅传递给管道运行 在受保护的分支和标签上。

搜索受保护的分支 我注意到,在设置 > 存储库 > 受保护的分支 中没有设置受保护的分支。

所以我可以选择取消选中 [ ] Protected 复选框,这样每个分支都可以使用秘密变量,或者采用更安全的方法并将我的分支(例如 master)添加为受保护的分支。

现在一切都恢复正常了。再次感谢@pynexj 指出导致脚本问题的原因。