Tengo deploy.sh y este es el contenido.

#!/bin/bash

ssh root@202.119.36.10
cd ../var/www/myProject

Yo ejecuto bash deploy.sh la parte del cd no funciona? La idea es automatizar mi implementación, ahora tengo que ir manualmente al directorio, hacer git pull y reiniciar mi servidor de nodos.

0
Alisa T Morgan 17 sep. 2018 a las 13:16

5 respuestas

La mejor respuesta

Tu guión significa:

  1. Inicia sesión en tu servidor.
  2. Después de cerrar sesión, ejecute el comando cd ../var/www/myProject en su computadora.

Puede poner todos los comandos en el Aquí documento

#!/bin/bash

ssh root@202.119.36.10 <<EOF
cd /var/www/myProject
EOF

Normalmente, si cambiamos a las carpetas del sistema, como /var, /etc, usamos la ruta absoluta.

O coloque todos los comandos que desee ejecutar en el servidor en un archivo de script.

El contenido del archivo deploy.sh :

cd /var/www/myProject

Copie este script en su servidor y ejecútelo:

scp deploy.sh root@202.119.36.10:
ssh root@202.119.36.10 bash deploy.sh

O ejecute el script a través de here-document

ssh root@202.119.36.10 bash < deploy.sh
1
Feng 17 sep. 2018 a las 11:23

En mi opinión, es una idea incorrecta ir y ssh al servidor (que hice antes)

Puede ejecutar el entorno de CI / CD que puede hacerlo por usted mientras inserta su código en el servidor (GitLab o etc.) y activará su bash dentro de su protector (como lo configura) y ejecutará su comando y finalmente Implemente su producto.

Aquí puede obtener más información: GitLab CI / CD

0
Mohammad Hosein Balkhani 17 sep. 2018 a las 10:26

He resuelto el problema, este es mi script

#!/bin/bash

ssh root@server_ip << 'COMMAND'
cd ../var/www/myProject
git pull
npm i
pm2 restart server
COMMAND
0
Alisa T Morgan 17 sep. 2018 a las 11:27

Ese comando cd se ejecutará en su máquina local, no en la remota.

Lo que sucede aquí es que está abriendo una conexión ssh, luego el script bloquea la espera de comandos para esa conexión ssh, que nunca envía. Luego, cuando regrese el comando ssh (que, de nuevo, nunca sucede), haría un cd directamente en su máquina.

Una forma de hacerlo sería tener un archivo que consta de los comandos que desea iniciar en el servidor y canalizarlo al comando ssh, de esta manera.

ssh root@202.119.36.10 < commands

Donde commands es un archivo que contiene, p.

cd ../var/www/myProject

De lo contrario, podría tener commands en la máquina remota y llamarlo desde su máquina local (suponiendo que commands esté en la ruta de la raíz en la máquina remota).

ssh root@202.119.36.10 'commands'

Esto, por supuesto, supone que está haciendo un inicio de sesión sin contraseña en la máquina remota (por ejemplo, con un archivo de clave SSL).

0
Federico klez Culloca 17 sep. 2018 a las 10:29
#!/bin/bash

echo "deploying"
ssh root@202.119.36.10 'bash' < ./commands.sh

Para que pueda poner todos sus comandos en el archivo command.sh de la siguiente manera

#!/bin/bash

set -e
cd ../var/www/myProject
0
Ridham Tarpara 17 sep. 2018 a las 10:35