.png)
Ich versuche, mithilfe von CircleCI per SSH auf meine Compute Engine-Instanz zuzugreifen. Der Befehl sieht in der Datei config.yml folgendermaßen aus:
gcloud --quiet compute ssh [INSTANCE_NAME] --zone northamerica-northeast1-a --project [PROJECT_NAME] cd /var/www/dev
Ich kann mich erfolgreich authentifizieren und sehe die Eingabeaufforderung in den CircleCI-Protokollen. Die Befehle nach SSH werden jedoch nicht ausgeführt. Was mache ich hier falsch?
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]:~$
Ich erwarte, dass der CD-Befehl nach erfolgreicher Authentifizierung ausgeführt wird.
Antwort1
Bei Verwendung von SSH scheint es nicht möglich zu sein, das Verzeichnis durch einfaches Übergeben des Befehls zu ändern. Dies ist eine SSH-Einschränkung gemäß diesemServerfehler-Beitrag. Im Allgemeinen können Sie eine ausführbare Datei mit SSH ausführen, indem Sie -c
flag verwenden, und in ähnlicher Weise mit--command
mit gcloud wiedieses Beispiel.
gcloud compute ssh --zone=us-east1-c test --command="nohup ping -i 5 google.com > foo.out 2> foo.err < /dev/null &"
Aus dem obigen Serverfault-Beitrag geht jedoch hervor, dass ein Verzeichniswechsel mithilfe von -t
Flags und der Ausführung mehrerer Befehle in einer Anweisung möglich ist. Glücklicherweise kann gcloud solche Flags auch verwenden, indem es hinzufügt--ssh-flag
. Hier ist ein Beispiel, das das Verzeichnis ändert und den Systempfad ausgibt.
gcloud compute ssh --zone=us-central1-c instance-2 --ssh-flag="-t" --command="cd /bin; pwd"
/bin
Connection to xx.xx.xx.xx closed.
Beachten Sie, dass SSH beendet wurde (Verbindung geschlossen), sobald der letzte Befehl pwd
ausgeführt wurde. Um angemeldet zu bleiben und wie im Beitrag vorgeschlagen, verwenden Siebash --login
Ich bin nicht sicher, wie Befehle in circleCI ausgeführt werden, aber im Allgemeinen können Sie zum Ausführen eines Befehls in Linux den vollständigen Pfad direkt angeben, anstatt das Verzeichnis zu ändern. Beispielsweise /some/directory/executablefile
wird Folgendes ausgeführt executablefile
: