簡體   English   中英

Bash變量在Jenkinsfile中轉義

[英]Bash variable escaping in a 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
'''

基本上,我想包括使用Jenkins內部版本號( $BUILD_NUMBER )和包含git log結果的bash變量( changelog )獲取的tagnamebody “動態”值。

我已經進行了各種單引號和雙引號以及其他轉義的更改,這些更改我現在不確定應該如何。

當前,此操作失敗並顯示:

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"部分時,必須正確轉義那些字符。

為此,使用jq實用程序來生成POST JSON數據,如對類似問題回答中所述:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM