有问题的脚本:
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)
改成双引号即可。
基础不牢靠,辛辛苦苦排查了一上午。