parameters - 在詹金斯声明性管道中的多行 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
请帮忙谢谢
解决方案
$
您应该通过 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
"""
推荐阅读
- sass - 更改按钮填充覆盖 sass 变量
- python - 从字符串中条件提取子字符串
- javascript - 使用 If 条件的正确方法是什么?
- swift - 发布者完成时从 AnyCancellable 数组中删除
- python - 如何向 RGB 元组添加值?
- python - 如何从以下 keras 代码中解决批量规范化语法错误的问题?
- javascript - JavaScript 事件监听器与隐藏的 DOM 元素交互
- java - Android Studio 中的 CGPA 计算器
- javascript - 如何在 node js 中实现实时视频流?
- c++ - 如何使用 find() 和 end() 测试 boost multi_index 是否返回了一个元素