尝试使用.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/
。
说实话,我不知道从哪里开始以及如何追查这个问题,所以我对任何建议感到高兴。
答案 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指出导致脚本出现问题的原因。