Variable de Bash que escapa en un Jenkinsfile

Estoy intentando lo siguiente:

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

Básicamente quiero include valores "dynamics" para la tag , el name y el body que se toman usando el número de compilation de Jenkins ( $BUILD_NUMBER ) y una variable bash que contiene el resultado de git log ( changelog ).

He hecho todo tipo de comillas simples y dobles y otros cambios de escape que ya no estoy seguro de cómo debería ser.

Esto actualmente falla con:

curl: (6) No se pudo resolver el host: variable
Curl: (6) No se pudo resolver el host: escapando
curl: (6) No se pudo resolver el host: 9a21d71
curl: (6) No se pudo resolver el host: más
Curl: (6) No se pudo resolver el host: escapando
curl: (6) No se pudo resolver el host: bashs
curl: (6) No se pudo resolver el host: 708ed0f
curl: (6) No se pudo resolver el host: más
curl: (6) No se pudo resolver el host: escaping '

No puede manejar los contenidos dentro de la variable changelog .

El reto aquí no es solo escaping de las comillas al generar dinámicamente una cadena, sino también garantizar que el resultado sea un JSON válido. Por ejemplo, en su caso, el changelog puede contener nuevas líneas y comillas y, cuando se expande en la parte "body": "$changelog" de sus datos POST, esos caracteres deben ser escapados correctamente.

Para este fin, use la utilidad jq para generar los datos POST JSON como se explica en la respuesta a una pregunta similar:

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