Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Gitlab.com CI/CD ssh权限问题_Bash_Ssh_Gitlab Ci_Gitlab Ci Runner - Fatal编程技术网

Bash Gitlab.com CI/CD ssh权限问题

Bash Gitlab.com CI/CD ssh权限问题,bash,ssh,gitlab-ci,gitlab-ci-runner,Bash,Ssh,Gitlab Ci,Gitlab Ci Runner,我正在使用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/:没有这样的文件或目录。我还做了ls-al来查看/var的目录结构,结果发现它不包含w

我正在使用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/:没有这样的文件或目录
。我还做了
ls-al
来查看
/var
的目录结构,结果发现它不包含
www
目录。很明显,现在我没有权限访问
www
目录

-rsync-avz--exclude=.env。deployer@devvers.work:/var/www/data/staging/home
-sshdeployer@devvers.work
-cd/var
-ls-al
-cd/var/www

t这是脚本中失败的部分。有人知道为什么我的用户在从终端使用ssh时与在此脚本中使用ssh时拥有不同的权限吗?当一切正常且所有文件都已复制时,使用rsync处理文件。

最好使用ssh执行器:

然后您可以
.gitlab.yml
简单地包括

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

另请参见。

我猜您正在尝试的
cd
ls
命令实际上是在运行程序环境中执行的(无论是主机还是docker容器,取决于您的设置),而不是在您通过ssh连接到的机器上执行的

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

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

如果您在配置为shell executor的gitlab runner上遇到
第101行:cd:
问题,那么gitlab runner用户主目录中实际上可能有一个.bash_注销文件,该文件与我们使用的解决方案有点不同<代码>ssh“deployer@devvers.work“cd/var/www/data/staging/;other_command;other_command;
是的,这也是可能的。请记住,在使用
&&
时,任何命令都取决于前一个命令的成功与否,这是您的情况下可能需要的,例如使用
ssh”deployer@devvers.work" "cd/var/www/data/staging/&&first_命令和&second_命令“
如果
first_命令
失败,将不会运行
second_命令。
ssh deployer@devvers.work "touch /var/www/test_file && ls -al /var/www/"