我在这里读了很多,但仍然找不到如何解决这个问题:
steps.wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) {
steps.withCredentials([steps.usernamePassword(credentialsId: "test", usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')]) {
steps.sh """
curl --silent -u \${GIT_USERNAME}:\${GIT_PASSWORD} -H "Content-Type: application/json" -X POST https://some.url --data-binary @- <<-EOF
{
"state": "$STATE",
"key": "\$JOB_NAME",
"name": "\$BUILD_TAG",
"url": "\$BUILD_URL",
"description": "$DESCRIPTION"
}
EOF"""
它位于詹金斯共享库中。我读过我必须避免空格,但我没有看到我在这里创建了哪些空格。我不断收到此错误:
line 11: warning: here-document at line 2 delimited by end-of-file (wanted `EOF')
答案1
除了可能创建无效的 JSON(除非您可以假设您的变量已经是 JSON 编码)之外,您的此处文档还存在缩进问题。
您用于<<-EOF
启动包含 JSON 文档的此处文档。这样的here-document应该由字符串分隔,EOF
并且该字符串需要左齐平(根本没有缩进)或者它可以使用制表符缩进(不是空格)。同一行上不能有空格或任何类型的其他字符后字符串EOF
。
我的猜测是代码是使用空格缩进的,这就是为什么 shell 的解析器找不到终止EOF
字符串的原因。