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。
我的猜测是,您正在尝试的 cd
和 ls
命令实际上是在运行器的环境中执行的(无论是主机还是 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
我正在使用 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。
我的猜测是,您正在尝试的 cd
和 ls
命令实际上是在运行器的环境中执行的(无论是主机还是 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