【问题标题】:Use rsync with gitlab-ci.yml to sync Wordpress theme folders使用 rsync 和 gitlab-ci.yml 同步 Wordpress 主题文件夹
【发布时间】:2017-11-23 17:21:31
【问题描述】:

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

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

【问题讨论】:

    标签: git shell rsync sshpass


    【解决方案1】:

    您的$STAGE_FTP_PASS 必须为空,以便命令变为

    sshpass -p ssh -o StrictHostKeyChecking=no 
    

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

    【讨论】:

    • 感谢@pynexj,这是正确的。我不能echo $STAGE_FTP_PASS 即使它设置了,但那是另一个问题,我认为是 gitlab 特定的......非常感谢! :) 很好的帮助。
    • 如果还有其他人有同样的问题,我已经添加了关于我的确切问题的更详细的解决方案。
    • 花了我足够长的时间才找到这个......事实上,我是从一个不受保护的分支执行的,但是 gitlab 保护了密码变量,这导致了一个空变量,因此同样的(部分)错误 @987654327 @
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      相关资源
      最近更新 更多