How to pass variables from Jenkinsfile to shell command
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 the sh
. '
will just pass a literal string. So we need to make a few changes here.
The first is to change the '
to "
:
for (i in [ 'a', 'b', 'c' ]) { echo i sh "echo "from shell i=$i""}
However, now we need to escape the "
on the inside:
for (i in [ 'a', 'b', 'c' ]) { echo i sh "echo \"from shell i=$i\""}
Additionally, if a variable is being appended directly to a string like you are doing above ($i
onto i=
), we need to close it off with some curly braces:
for (i in [ 'a', 'b', 'c' ]) { echo i sh "echo \"from shell i=${i}\""}
That will get you the behavior you desire.
Extension to Matts answer:For multi-line sh scripts use
sh """ echo ${paramName}"""
instead of
sh ''' echo ${paramName}'''
try this:
for (i in [ 'a', 'b', 'c' ]) { echo i sh ''' echo "from shell i=$i" '''}