bash - 如何在 Jenkins 多行 shell 脚本中使用 bash 变量
问题描述
我没有成功尝试在 Jenkins 管道中使用 bash 变量。
我的第一次尝试
sh """#!/bin/bash
for file in *.map; do
filename=`basename $file .map`
echo "##### uploading ${$filename}"
curl -X POST ${SERVER_URL}/assets/v1/sourcemaps \
-F service_name="${SERVICE_NAME}" \
-F service_version="${revision}" \
-F bundle_filepath="${main_url}${filename}" \
-F sourcemap="@${filename}.map" &
done
wait
"""
导致异常:MissingPropertyException: No such property: file
第二次尝试,看到这个答案后https://stackoverflow.com/a/35047530/9590251
sh """#!/bin/bash
for file in *.map; do
filename=`basename \$file .map`
echo "##### uploading \$filename"
curl -X POST ${SERVER_URL}/assets/v1/sourcemaps \
-F service_name="${SERVICE_NAME}" \
-F service_version="${revision}" \
-F bundle_filepath="${main_url}\$filename" \
-F sourcemap="@\$filename.map" &
done
wait
"""
简单地省略了 bash 变量。所以 $filename 是空的。
在这种情况下,我如何需要对 bash 变量进行属性编码?
解决方案
试试这个:
sh """#!/bin/bash
set -x
for file in *.map; do
filename="\$(basename "\$file" .map)"
echo "Uploading \$filename"
curl -X POST "${SERVER_URL}/assets/v1/sourcemaps" \
-F service_name="${SERVICE_NAME}" \
-F service_version="${revision}" \
-F bundle_filepath="${main_url}\$filename" \
-F sourcemap="@\${filename}.map" &
done
wait
"""
推荐阅读
- r - R中的元胞自动机 - 消失状态在levelplot中改变颜色
- c++ - 使用 std::string 作为通用 uint8_t 缓冲区
- javascript - onsubmit 不显示按钮
- tensorflow-serving - 图像分类和张量流服务
- python - python 3项目-用于更新字典的用户菜单
- asp.net-core - 在 ASP.NET Core HostedService 中获取应用程序的基本 URL
- java - 当我尝试从文件中拆分一行时,我不断收到 IndexOutOfBounds 错误
- haskell - 导入模块时输入“模块”解析错误
- regex - Google 表单中不区分大小写的正则表达式:是否允许?
- reactjs - 在 fetch 方法从服务器接收令牌之前运行 React 渲染