【问题标题】:Gitlab.com CI/CD ssh permission issueGitlab.com CI/CD ssh 权限问题
【发布时间】:2017-03-10 22:03:38
【问题描述】:

我正在使用 CD 将我的代码部署到 VPS。这个 VPS 运行的是 ubuntu 16.04 并且有一个用户“部署者”。

现在,当我使用 ssh deployer@server 时,我获得了对服务器的 shell 访问权限,然后在使用 cd /var/www 时,我进入了 /var/www 目录。

当我从 .gitlab-ci.yml 中定义的部署脚本执行此操作时,我收到此错误 /bin/bash: line 101: cd: /var/www/data/: No such file or directory。我还做了ls -al 来查看/var 的目录结构,结果发现它不包含www 目录。很明显,现在我没有www 目录的权限。

- rsync -avz --exclude=.env . deployer@devvers.work:/var/www/data/staging/home - ssh deployer@devvers.work - cd /var - ls -al - cd /var/www 这是脚本中失败的部分。有谁知道为什么我的用户在从终端使用 ssh 时和在此脚本中使用 ssh 时具有不同的权限?在正常情况下使用rsync 处理文件并复制所有文件。

【问题讨论】:

    标签: bash ssh gitlab-ci gitlab-ci-runner


    【解决方案1】:

    我的猜测是,您尝试的 cd 和 ls 命令实际上是在运行器的环境中执行的(无论是主机还是 docker 容器,具体取决于您的设置),而不是在您 ssh 进入的机器上.

    我建议您使用 ssh 执行这些命令。创建文件并检查是否已创建的示例:

    ssh deployer@devvers.work "touch /var/www/test_file && ls -al /var/www/"
    

    【讨论】:

    • 我们正在使用这个解决方案,但有点不同。 ssh "deployer@devvers.work" "cd /var/www/data/staging/; other_command; other_command;
    • 是的,这也是可能的。请记住,在使用 && 时,任何命令都取决于前一个命令的成功,这可能是您在情况下可能需要的,例如如果 first_command 失败,second_command 将不会运行 ssh "deployer@devvers.work" "cd /var/www/data/staging/ && first_command && second_command"。
    【解决方案2】:

    最好使用 ssh 执行器,configured through a config.toml:

    /etc/gitlab-runner/config.toml:
    
    concurrent = 1
    
    [[runners]]
      url = "http://your_gitlab/ci"
      token = "xxx..."
      name = "yourGitLabCI"
      executor = "ssh"
      [runners.ssh]
        user = "deployer"
        host = "devvers.work"
        port = "22"
        identity_file = "/home/user/.ssh/id_rsa"
    

    那你.gitlab.yml 可以简单地包含

    job:
    script:
        - "ls /var/www"
        - "cd /var/www"
        ...
    

    另见this example。

    【讨论】:

      【解决方案3】:

      如果您在配置为 shell 执行程序的 gitlab-runner 上遇到 line 101: cd: 问题,实际上可能在 gitlab-runner 用户主目录中有一个 .bash_logout 文件与 https://gitlab.com/gitlab-org/gitlab-runner/issues/3849 一起导致该问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-21
        • 2017-01-14
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 2022-10-21
        相关资源
        最近更新 更多