2017-06-18 46 views
0
逸出

我试图执行以下操作:击变量在Jenkinsfile

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 
''' 

基本上我想包括用于tagnamebody其使用所采取的詹金斯版本号($BUILD_NUMBER)“动态”的值和一bash变量包含git logchangelog)的结果。

我做了各种单引号和双引号以及其他转义,我不知道它应该如何。

目前这失败:

卷曲:(6)无法解析主机:可变
卷曲:(6)无法解析主机:逃避
卷曲:(6)无法解析主机:9a21d71
卷曲:(6)无法解析主机:更多
卷曲:(6)无法解析主机:逃避
卷曲:(6)无法解析主机:尝试
卷曲:(6)无法解析主机:708ed0f
卷曲:(6)无法解析主机:更多
卷曲:(6)无法解析主机:逃脱”

它不能处理changelog变量里面的内容。

回答

4

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

为此使用jq实用程序生成的POST JSON数据作为answer解释类似question

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 [email protected] https://****/api/v3/repos/****/****/releases?access_token=$JENKINS_ACCESS_TOKEN_PSW 
''' 
+0

嗯...这不是为我工作很好,它失败“解析JSON的问题“。查看詹金斯的结果:https://pastebin.com/kSVd57Zc –

+0

@IdanAdar什么是不工作?我很难从提供的数据中猜出它。 – Leon

+0

那么,它解析JSON失败了,这是我得到的唯一结果。 pastebin显示执行的命令。 –