如何解决jenkinsfile 执行的 bash 脚本变量值中的星号导致 glob 模式
我创建了一个 jenkins 作业,它从用户那里读取 Cron 计划(字符串)参数并将其传递给一些 bash 脚本,该脚本会将值插入到一些 yaml 文件中:
stringParam(name: "CRON_SCHEDULE",description: "What is the Cron job schedule? (e.g. * * * * *) ")
这些时间表通常包含星号 - 这会导致 bash 脚本列出当前目录中的文件,而不仅仅是作为字符串(如定义的 groovy 文件)。
当我从 groovy 文件调用 bash 脚本并发送(命名)参数时:
sh "./scripts/create_yaml.sh CRON_SCHEDULE=\"'$params.CRON_SCHEDULE'\" "
日程安排似乎很好(在作业日志中):
+create_yaml.sh CRON_SCHEDULE='0 0 * * *'
但是当 bash 脚本正在读取这个参数并将它插入到 yaml 文件中时,它会列出这些文件并且参数是这样的:
'0 0 file1 file2 file3 file1 file2 file3 file1 file2 file3'
我已经尝试了我所知道的所有引号操作,在 bash 脚本之外和内部,我不知道接下来要尝试什么。
如何将这个参数作为普通字符串传递和处理?
这是接收调度参数并创建 yaml 的 bash 脚本:
#!/bin/bash
for ARGUMENT in "$@"
do
KEY=$(echo $ARGUMENT | cut -f1 -d=)
VALUE=$(echo $ARGUMENT | cut -f2 -d=)
case "$KEY" in
APPLICATION_NAME)
APPLICATION_NAME=${VALUE} ;;
IMAGE_NAME)
IMAGE_NAME=${VALUE} ;;
APPLICATION_TYPE)
APPLICATION_TYPE=${VALUE} ;;
CRON_SCHEDULE)
CRON_SCHEDULE="${VALUE}" ;;
CHART_FOLDER)
CHART_FOLDER=${VALUE} ;;
esac
done
echo "cron schedule is ${CRON_SCHEDULE}";
touch ./$CHART_FOLDER/values.yaml
if [ $APPLICATION_TYPE == "cronjob" ]; then
cat > "./$CHART_FOLDER/values.yaml" << EOF
image:
image: $IMAGE_NAME
tag: base
cron:
production:
schedule: "$CRON_SCHEDULE"
EOF
fi
任何帮助将不胜感激。 谢谢!!
解决方法
以下脚本:
#!/bin/bash
args=([0]="APPLICATION_NAME=Testing1" [1]="APPLICATION_DESCRIPTION=testRun" [2]="IMAGE_NAME=imageName" [3]="SENTRY_DSN=DSN" [4]="COMMAND=command" [5]="COMMAND_ARGS=args" [6]="APPLICATION_TYPE=cronjob" [7]="EXPOSE_JIRA=false" [8]="EXPOSE_WORKATO=false" [9]="CRON_SCHEDULE='0 0 0 * *'" [10]="CHART_FOLDER=chart_output")
set -- "${args[@]}"
for i in "$@"; do
IFS== read -r key value <<<"$i"
# remove single quotes
if [[ "$value" =~ ^\'(.*)\'$ ]]; then
value=${BASH_REMATCH[1]}
fi
# use declare to declare the variable with that value
declare "$key=$value"
done
echo "cron schedule is ${CRON_SCHEDULE}";
cat << EOF
image:
image: $IMAGE_NAME
tag: base
cron:
production:
schedule: "$CRON_SCHEDULE"
EOF
输出:
cron schedule is 0 0 0 * *
image:
image: imageName
tag: base
cron:
production:
schedule: "0 0 0 * *"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。