user4447899
user4447899

Reputation: 332

Having params inside a multiline sh script in a jenkins declarative pipeline

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

Answers (1)

hakamairi
hakamairi

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

Related Questions