カールで使用するためのjsonのbash varの置き換え

カールで使用するためのjsonのbash varの置き換え

(myjson)チーム、curlコマンドで使用するjsonの値を変更することはできません。どのようなヒントがありますか?

JENKINS_USERNAME="svc-user"
JENKINS_USER_TOKEN="xxxx"
JENKINS_INSTANCE_FQDN="sham.blsm.comp.com"
INSTANCE="test-verify"
CREDENTIAL_ID_NAME="test"
USERNAME_KEY="tests"
USER_PASSWORD_KEY="testst"
ID_DESCRIPTION="asdfasdfasdf"
myjson=\''{ 
            "credentials": {
                "scope": "GLOBAL",
                "id": "'"${CREDENTIAL_ID_NAME}"'",
                "username": "'"${USERNAME_KEY}"'", 
                "password": "'"${USER_PASSWORD_KEY}"'",
                "description": "'"${ID_DESCRIPTION}"'",
                "\$class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl"
            }
        }'\'
curl -X POST https://${JENKINS_USERNAME}:${JENKINS_USER_TOKEN}@${JENKINS_INSTANCE_FQDN}/${JENKINS_INSTANCE}/credentials/store/system/domain/_/createCredentials \
--data-urlencode ${myjson}

出力

curl -X POST https://${JENKINS_USERNAME}:${JENKINS_USER_TOKEN}@${JENKINS_INSTANCE_FQDN}/${JENKINS_INSTANCE}/credentials/store/system/domain/_/createCredentials \
--data-urlencode ${myjson}
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
curl: (3) URL using bad/illegal format or missing URL
curl: (3) unmatched brace in URL position 1:
{
 ^

以下の回答は役に立ちませんでした。 JSON文字列のBash変数の置換

ベストアンサー1

一重引用符は値の一部ではなくコマンドラインの一部です。カールが値を取得する前に引用符拡張から削除されるため、含めないでください。

myjson='{ 
            "credentials": {
                "scope": "GLOBAL",
                "id": "'"${CREDENTIAL_ID_NAME}"'",
                "username": "'"${USERNAME_KEY}"'", 
                "password": "'"${USER_PASSWORD_KEY}"'",
                "description": "'"${ID_DESCRIPTION}"'",
                "$class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl"
            }
        }'

(ドル記号は一重引用符でエスケープする必要はありません。)

単語の区切りを防ぐには、変数を二重引用符で囲む必要があります。

curl -X POST https://${JENKINS_USERNAME}:${JENKINS_USER_TOKEN}@${JENKINS_INSTANCE_FQDN}/${JENKINS_INSTANCE}/credentials/store/system/domain/_/createCredentials \
--data-urlencode "${myjson}"

これは、変数に二重引用符が含まれていない場合にのみ機能します。より複雑なケースを処理するには、JSON認識ツールを使用する方がよいでしょう。学習することをお勧めします。

おすすめ記事