Gitlab.com CI/CD ssh权限问题

Gitlab.com CI/CD ssh permission issue

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

现在,当我使用 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 复制文件,所有文件都已复制。

最好使用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

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

我建议你宁愿执行那些命令 ssh。创建文件并检查是否已创建示例:

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

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