在文件中转义的Bash变量

在文件中转义的Bash变量,bash,curl,github,jenkins,Bash,Curl,Github,Jenkins,我正在尝试以下方法: sh ''' changelog=$(git log `git describe --tags --abbrev=0 HEAD^`..HEAD --oneline) curl --data '{"\tag_name\": \\"v0.0.${BUILD_NUMBER}\\",\"target_commitish\": \"master\",\"name\": \\"Release v0.0.$BUILD_NUMBER\\",\"body\": \\"$cha

我正在尝试以下方法:

sh '''
    changelog=$(git log `git describe --tags --abbrev=0 HEAD^`..HEAD --oneline)
    curl --data '{"\tag_name\": \\"v0.0.${BUILD_NUMBER}\\",\"target_commitish\": \"master\",\"name\": \\"Release v0.0.$BUILD_NUMBER\\",\"body\": \\"$changelog\\",\"draft\": false,\"prerelease\": false}' https://****/api/v3/repos/****/****/releases?access_token=$JENKINS_ACCESS_TOKEN_PSW
'''
基本上,我想包括
标记
名称
主体
的“动态”值,这些值是使用Jenkins构建编号(
$build\u编号
)和包含
git日志
结果的bash变量获取的

我已经做了各种各样的单引号和双引号以及其他转义的更改,我不知道应该如何

此操作当前在以下情况下失败:

curl:(6)无法解析主机:变量
curl:(6)无法解析主机:正在转义
curl:(6)无法解析主机:9a21d71
curl:(6)无法解析主机:更多
curl:(6)无法解析主机:正在转义
curl:(6)无法解析主机:尝试次数
curl:(6)无法解析主机:708ed0f
curl:(6)无法解析主机:更多
curl:(6)无法解析主机:正在转义'


它无法处理
changelog
变量中的内容。

这里的挑战不仅仅是在动态生成字符串时正确地转义引号,还要确保结果是有效的JSON。例如,在您的案例中,
changelog
可能包含换行符和引号,并且当它扩展到POST数据的
“body”:“$changelog”
部分时,这些字符必须正确转义

为此,使用该实用程序生成POST JSON数据,如中所述,以类似的方式:


这里的挑战不仅仅是在动态生成字符串时正确地转义引号,还包括确保结果是有效的JSON。例如,在您的案例中,
changelog
可能包含换行符和引号,并且当它扩展到POST数据的
“body”:“$changelog”
部分时,这些字符必须正确转义

为此,使用该实用程序生成POST JSON数据,如中所述,以类似的方式:


隐马尔可夫模型。。。这对我来说不是很好,它失败了,因为“解析JSON有问题”。在这里看到詹金斯的结果:@IdanAdar什么东西不起作用?我很难从提供的数据中猜出来,因为解析JSON失败了,这是我得到的唯一结果。pastebin显示了执行的命令。我能看到的唯一问题是
body
的内容包含一个未转换的换行符。请直接尝试此命令并告诉我它是否有效:
curl--data'{“tag_name”:“v0.0.39”,“target_commitish”:“master”,“name”:“Release v0.0.39”,“body”:“b8898d1添加缺少的引号\nbe0ab22尝试使用curldata”,“draft”:false,“prerelease”:false}”https://******/api/v3/repos/******/releases?access\u-token=*****,由于
changelog
可以包含换行符,因此必须用转义序列替换换行符。我会很快更新答案。嗯。。。这对我来说不是很好,它失败了,因为“解析JSON有问题”。在这里看到詹金斯的结果:@IdanAdar什么东西不起作用?我很难从提供的数据中猜出来,因为解析JSON失败了,这是我得到的唯一结果。pastebin显示了执行的命令。我能看到的唯一问题是
body
的内容包含一个未转换的换行符。请直接尝试此命令并告诉我它是否有效:
curl--data'{“tag_name”:“v0.0.39”,“target_commitish”:“master”,“name”:“Release v0.0.39”,“body”:“b8898d1添加缺少的引号\nbe0ab22尝试使用curldata”,“draft”:false,“prerelease”:false}”https://******/api/v3/repos/******/releases?access\u-token=*****,由于
changelog
可以包含换行符,因此必须用转义序列替换换行符。我将很快更新答案。
sh '''
    changelog=$(git log `git describe --tags --abbrev=0 HEAD^`..HEAD --oneline)
    jq -n --arg tagname "v0.0.$BUILD_NUMBER"      \
          --arg name "Release v0.0.$BUILD_NUMBER" \
          --arg body "$changelog"                 \
          '{"tag_name": $tagname, "target_commitish": "master", "name": $name, "body": $body, "draft": false, "prerelease": false}'  |
    curl -d@- https://****/api/v3/repos/****/****/releases?access_token=$JENKINS_ACCESS_TOKEN_PSW
'''