0

在尝试使用.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/.

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

4

2 回答 2

2

你的$STAGE_FTP_PASS必须是空的,所以命令会变成

sshpass -p ssh -o StrictHostKeyChecking=no 

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

于 2017-11-23T03:39:26.687 回答
1

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

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

搜索受保护的分支我注意到,在Settings > Repository > Protected Branches中没有设置受保护的分支。

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

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

于 2017-11-23T09:21:31.893 回答