-
Improvement
-
Resolution: Unresolved
-
Minor
-
None
-
Jenkins version 2.138.1 but has been tested against the latest LTS and still happens
I have an issue where I was trying to run a ssh command inside of a shell step but could not preserve the ticks and quotes I needed in the command I run during the SSH. The command looked something like this:
```
sh "ssh -i $keyFile $adminUser@$Host 'sudo $command -f ${Cloud} -u ${env.USERNAME} -x ${env.PASSWORD} -s \"mountPoint=\'/admintool/1\'\" -p redeploy'"
```
The issue is that the shell script I am running $command requires that mountPoint variable to be within quotes " and the argument after the equals needs to be in ticks '.
This issue only happens on shell steps as I can echo the command correctly by replacing the above sh with echo.
Workaround: In the end I had to build a shell script on disk and just run that so something in the groovy interpretation is breaking things.
Steps to reproduce:
1. Start up a brand new Jenkins instance with Pipeline installed
2. Create a new job with the following definition:
node(){ echo """ ssh -i $PEM_KEY $USER@$MACHINE 'echo "-f Cloud -u USERNAME -x PASSWORD -s \"mountPoint=\'/admintool/1\'\" -p redeploy"' """ sh """ ssh -i $PEM_KEY $USER@$MACHINE 'echo "-f Cloud -u USERNAME -x PASSWORD -s \"mountPoint=\'/admintool/1\'\" -p redeploy"' """ }
3. Observe that the echo prints out the statememt correctly with: `"mountPoint='/admintool/1'" but the ssh command echo does not as it removes the single ticks around admintool
Thoughts:
My understanding of echo is that it is almost the same as `sh` so I am not sure why the shell step is removing the escaped characters. Maybe there is some interpretation done on `sh` I am not aware of. So if there is any way to fix this or a better workaround I am all ears