我正在使用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
处理文件。
答案 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)
我的猜测是你正在尝试的cd
和ls
命令实际上是在跑步者的环境中执行的(无论是主机还是码头工具容器,具体取决于你的设置) ,而不是你进入的机器。
我建议您使用 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 }}