Gitlab.com CI / CD ssh权限问题

时间:2017-03-10 22:03:39

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

我正在使用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处理文件。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我的猜测是你正在尝试的cdls命令实际上是在跑步者的环境中执行的(无论是主机还是码头工具容器,具体取决于你的设置) ,而不是你进入的机器。

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

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

答案 2 :(得分:0)

如果在配置为shell执行程序的gitlab-runner上遇到line 101: cd:问题,则gitlab-runner users主目录中实际上可能存在一个.bash_logout文件,该文件与{{3 }}