Reputation: 332
Hi given the following in a stage of my pipeline
sh """#!/bin/bash -xe
aws lambda create-function --region us-east-1 --role ${params.role} --handler ${params.handler} --runtime ${params.runtime} --function-name ${params.name} --zip-file fileb:///tmp/function.zip &&
VERSION=$(aws lambda publish-version --function-name ${params.name} | jq -r .Version) &&
aws lambda update-alias --function-name ${params.name} --name DEV --function-version $VERSION &&
aws lambda update-alias --function-name ${params.name} --name TEST --function-version $VERSION &&
aws lambda update-alias --function-name ${params.name} --name PROD --function-version $VERSION
"""
I keep getting error
workflowScript: 22: illegal string body character after dollar sign; solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}" @ line 22, column 178. --function-name ${params.name} --zip-fi
Ive tried with ''' and """
I need it to substitute the various params out and also use the VERSION
Please help Thanks
Upvotes: 1
Views: 1529
Reputation: 4678
You should escape the $
by the VERSION. In general in double quotes any $
is evaluated in the current groovy context and then send to the sh
command to be evaluated in the executor context. Hence you need to be very careful around those.
sh """#!/bin/bash -xe
aws lambda create-function --region us-east-1 --role ${params.role} --handler ${params.handler} --runtime ${params.runtime} --function-name ${params.name} --zip-file fileb:///tmp/function.zip &&
VERSION=\$(aws lambda publish-version --function-name ${params.name} | jq -r .Version) &&
aws lambda update-alias --function-name ${params.name} --name DEV --function-version \$VERSION &&
aws lambda update-alias --function-name ${params.name} --name TEST --function-version \$VERSION &&
aws lambda update-alias --function-name ${params.name} --name PROD --function-version \$VERSION
"""
Upvotes: 3