如何在Jenkins中创建可代入参数变量的JSON文件
问题原因
你的变量没有被替换的核心原因是:单引号包裹的字符串在shell中不会解析内部变量,所有内容都会原样输出,所以$company_name不会被替换为实际值。另外你示例代码中JSON的最后一个键值对后多了冗余逗号,会导致生成的JSON格式非法,也需要修正。
解决方案
方案1:改用双引号包裹echo内容
将外层的单引号替换为双引号,同时转义JSON内部的双引号即可:
echo " { \"common\": { \"baseUri\": \"$company_name\", \"ipPrefix\": \"192.23.4.\" } }" > test.json
方案2:使用Here Doc生成(更推荐多行场景)
Here Doc的可读性更高,不需要大量转义引号,适配复杂内容:
cat > test.json << EOF { "common": { "baseUri": "$company_name", "ipPrefix": "192.23.4." } } EOF
如果是在Jenkins Pipeline中使用,直接嵌入sh步骤即可,同时支持调用Jenkins内置参数/环境变量:
steps { // 其中${params.company_name}会直接被Jenkins替换为构建参数值 sh """ cat > test.json << EOF { "common": { "baseUri": "${params.company_name}", "ipPrefix": "192.23.4." } } EOF """ }
方案3:用jq生成(复杂JSON场景首选)
如果JSON结构复杂、包含特殊字符,用jq命令生成可以自动处理转义,避免格式错误:
jq -n --arg base_uri "$company_name" ' { "common": { "baseUri": $base_uri, "ipPrefix": "192.23.4." } }' > test.json
内容的提问来源于stack exchange,提问作者Samselvaprabu
相关产品推荐
相关产品推荐

