I want to use a variable which I am using inside of my Jenkinsfile
script, and then pass its value into a shell script execution (either as an environment variable or command line parameter).
But the following Jenkinsfile
:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh 'echo "from shell i=$i"'
}
Gives the output:
a
from shell i=
b
from shell i=
c
from shell i=
Desired output is something like:
a
from shell i=a
b
from shell i=b
c
from shell i=c
Any idea how to pass the value of i
to the shell scipt?
Edit: Based upon Matt's answer, I now use this solution:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "i=${i}; " + 'echo "from shell i=$i"'
}
The advantage is, that I don't need to escape the "
in the shell script.
Your code is using a literal string and therefore your Jenkins variable will not be interpolated inside the shell command. You need to use
"
to interpolate your variable inside your strings inside thesh
.'
will just pass a literal string. So we need to make a few changes here.The first is to change the
'
to"
:However, now we need to escape the
"
on the inside:Additionally, if a variable is being appended directly to a string like you are doing above (
$i
ontoi=
), we need to close it off with some curly braces:That will get you the behavior you desire.
Extension to Matts answer: For multi-line sh scripts use
instead of
try this: