首页 > 解决方案 > 在詹金斯声明性管道中的多行 sh 脚本中包含参数

问题描述

嗨,在我的管道阶段给出以下内容

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  
"""

我不断收到错误

 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

我试过用 ''' 和 """

我需要它来替换各种参数并使用 VERSION

请帮忙谢谢

标签: parametersjenkins-pipelinesh

解决方案


$您应该通过 VERSION转义。通常,在双引号中,any$在当前 groovy 上下文中进行评估,然后发送到sh要在执行程序上下文中评估的命令。因此,您需要非常小心。

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  
"""

推荐阅读