Tech Note · 2023-01-13 0

Jenkins shell-使用jq解析curl返回数据,并引用变量

背景:项目ios客户端测试环境原有job配置是:build完成后,curl发布文件到蒲公英平台然后给钉钉群发通知
痛点:1.群消息的蒲公英链接是固定的,默认显示最新的构建结果,2.网站的历史结果列表展示的是蒲公英自增的version number,不是jenkins build number。想找历史版本非常不方便
我的需求:群消息中引用curl返回值变量,直接点击群消息链接可以进入到对应版本(文件发布到蒲公英后会返回对应信息,观察发现对应包的url都是蒲公英域名+buildKey。所以只要取response里“buildKey”的value作为变量组合就可以了)

预先想到的三条方法:
1.jenkins shell 不动,取蒲公英API结果设置成新变量,脚本引用新变量(推荐)
2.修改jenkins流水线顺序,先用蒲公英插件,后用钉钉插件(插件在构建结束后才能使用,会影响原本shell之后的操作,修改风险大)
3.以上都不好用,修改蒲公英设置: “使用app自带build号作为build version”,每次自己点进对应version(不太方便)

最终实现步骤:

1. 定义新变量,存放curl返回的response

result=$(curl …)

2. 使用jq解析变量json,只留目标值

buildkey=$(echo ${result} | jq -r '.data.buildKey')

2.1 配置环境:给跳板机安装jq

mac os 安装jq
brew install jq
参考:https://blog.csdn.net/shenhonglei1234/article/details/113821585

Centos 安装jq:

chmod +x ./jq
cp jq /usr/bin
yum install -y jq

2.2 jq命令解析json

buildkey=$(echo ${result} | jq -r '.data.buildKey')
多层嵌套;(引申:取第n个json body)
使用-r 参数去除引号:https://blog.csdn.net/VIP099/article/details/125815615

3. 组合URL,域名+buildKey

"messageUrl": "https://www.pgyer.com/'$buildkey'"
注意shell语法在双引号里加变量需要使用单引号括起来(小踩一坑)

Jenkins+蒲公英使用可以参考文档:https://www.pgyer.com/doc/view/faq_dev