如何在Bamboo脚本任务中用Node.js变量配置curl的Authorization头
解决Bamboo流水线中Node生成Token传递给curl的问题
问题原因
你当前的写法无法生效,核心原因是:Node进程是shell的子进程,子进程无法修改父进程(shell)的环境变量,所以你在Node脚本里设置的process.env.AuthToken不会被shell读取到;另外${bamboo.AuthToken}是Bamboo的预定义变量,和shell环境变量不是一回事。
正确解决方案
让Node脚本直接输出生成的signedToken,再在shell中捕获这个输出值,赋值给shell变量后传给curl:
# 生成Node脚本,直接输出token而非设置环境变量 tee -a test.js > /dev/null << EOT // 你的token生成逻辑 var token = "实际生成的token"; var signature = "实际生成的签名"; var signedToken = token + "." + signature; console.log(signedToken); // 将token输出到标准输出 EOT echo "xxxxxxxxxxxxxxxxx" # 捕获Node脚本的输出,赋值给shell变量 AUTH_TOKEN=$(node test.js) echo "xxxxxxxxxxxxxxxxx" # 使用shell变量填充Authorization头 curl --location 'https://test.com/' \ --header 'Content-Type: application/json' \ --header "Authorization: $AUTH_TOKEN" \ --data '{ }'
关键说明
- 子进程(Node)无法修改父进程(shell)的环境变量,必须通过标准输出传递值
- shell中用
$(command)语法捕获命令的输出,赋值给变量 - curl的header必须用双引号包裹,这样shell才会解析变量;单引号会把
$AUTH_TOKEN当作字面量直接传递
内容的提问来源于stack exchange,提问作者Valay
相关产品推荐
相关产品推荐

