Unitech / pm2-deploy

Deploy part of PM2
http://pm2.keymetrics.io/docs/usage/deployment/
MIT License
178 stars 72 forks source link

Deployment errors if default shell on remote host is not `bash` #200

Open ghost opened 2 years ago

ghost commented 2 years ago

Hi there.

Problem

I was trying to deploy my project to a Debian server, which has dash configured as the default shell. I was running into weird errors like this:

--> Deploying to production environment
--> on host ***

  ○ deploying origin/master
  ○ executing pre-deploy-local
  ○ executing pre-deploy `node -v && npm -v`
v16.13.0
8.1.0
sh: 1: Bad substitution

  pre-deploy hook failed

Deploy failed
Deploy failed with exit code: 1

Cause

After some digging, I conjecture that the deployment script uses some bash-specific features not compatible with dash. For example, this line... https://github.com/Unitech/pm2-deploy/blob/987428a6ce402b47bb195ab93a8eafa5ad79c6f5/deploy#L212

...does not expand correctly, treating curly braces as part of the directory name: image

Ultimately the point of failure is ssh running commands in whatever is configured to be the default shell: https://github.com/Unitech/pm2-deploy/blob/987428a6ce402b47bb195ab93a8eafa5ad79c6f5/deploy#L122

Proposed changes

It would be great if the script either

Or, if you don't intend to change this behavior, it would be nice if it at least could be mentioned in the docs.

I tried tweaking that part of the script myself, but unfortunately didn't have enough shell knowledge to succeed.

Prior report: https://github.com/Unitech/pm2/issues/1553

Thanks.