使用自动部署(即 CircleCI)通过 SSH 进入 Google Compute Engine

使用自动部署(即 CircleCI)通过 SSH 进入 Google Compute Engine

我正在尝试使用 CircleCI 通过 SSH 进入我的 Compute Engine 实例,命令如下(在 config.yml 中):

gcloud --quiet compute ssh [INSTANCE_NAME] --zone northamerica-northeast1-a --project [PROJECT_NAME] cd /var/www/dev

我可以成功验证身份并在 CircleCI 日志中看到命令提示符。但是,SSH 后的命令没有执行。我在这里做错了什么?

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Sep 12 15:53:55 2018 from 18.212.180.159

[USER_NAME]:~$

我希望在验证成功后运行 cd 命令。

答案1

使用 SSH,似乎无法通过传递命令来更改目录,这是 SSH 的限制Serverfault 帖子。一般来说,你可以使用 flag 通过 SSH 运行可执行文件-c,同样也可以使用--command使用 gcloud 类似这个例子

gcloud compute ssh --zone=us-east1-c test --command="nohup ping -i 5 google.com > foo.out 2> foo.err < /dev/null &"

但是,从上面的 serverfault 帖子来看,-t除了在一个语句中执行多个命令之外,还可以使用标志来更改目录。幸运的是,gcloud 也可以通过添加来使用此类标志--ssh-flag。下面是改变目录并输出系统路径的例子。

gcloud compute ssh --zone=us-central1-c  instance-2 --ssh-flag="-t" --command="cd /bin; pwd"
/bin
Connection to xx.xx.xx.xx closed.

请注意,执行完最后一个命令后,SSH 退出(连接关闭)pwd。要保持登录状态并按照帖子中的建议使用bash --login

我不确定 circleCI 中命令是如何运行的,但一般来说,要在 Linux 中运行命令,您可以直接指定完整路径,而不是更改目录。例如,/some/directory/executablefile将运行executablefile

相关内容