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

时间:2017-11-22 18:40:00

标签: git shell rsync sshpass

尝试使用.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帐户,runner和gitlab托管成功在其他git repos中自动部署。

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

说实话,我不知道从哪里开始以及如何追查这个问题,所以我对任何建议感到高兴。

2 个答案:

答案 0 :(得分:1)

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

sshpass -p ssh -o StrictHostKeyChecking=no 

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

答案 1 :(得分:1)

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

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

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

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

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