有问题的脚本:
updateRes=\$(curl --location --request PUT 'http://172.16.80.88:3100/api/application/devopsBuildVersion' \
--header 'Authorization: bGFtcF93ZWJfcHJvOmxhbXBfd2ViX3Byb19zZWNyZXQ=' \
--header 'Content-Type: application/json;charset=UTF-8' \
--header 'Tenantid: 1' \
--header "Token: \${token}" \
--header 'Applicationid: 449535419210898432' \
--data '{
"id": "\$(params.build_version_id)",
"jarWarFileName": "\${JAR_WAR_FILE_NAME}"
}' -m 3 -s)
${JAR_WAR_FILE_NAME}会被当作字符串解析。
原因:在 Bash 中,单引号会阻止变量展开,这意味着任何包含在单引号中的变量都不会被解释为其值,而是被视为纯文本字符串。
正确代码:
updateRes=\$(curl --location --request PUT 'http://172.16.80.88:3100/api/application/devopsBuildVersion' \
--header 'Authorization: bGFtcF93ZWJfcHJvOmxhbXBfd2ViX3Byb19zZWNyZXQ=' \
--header 'Content-Type: application/json;charset=UTF-8' \
--header 'Tenantid: 1' \
--header "Token: \${token}" \
--header 'Applicationid: 449535419210898432' \
--data "{
'id': '\$(params.build_version_id)',
'jarWarFileName': '\${JAR_WAR_FILE_NAME}'
}" -m 3 -s)
改成双引号即可。
基础不牢靠,辛辛苦苦排查了一上午。