jenkins - 将每个阶段数据从jenkins管道推送到influx db时如何修复java.io.NotSerializable异常?
问题描述
我正在尝试将阶段数据从 Jenkins 管道推送到流入数据库,我遇到如下问题
问题:在 jenkin 构建控制台输出中,在每个阶段之后,我看到:java.io.NotSerializableException: sun.net.www.protocol.http.HttpURLConnection
詹金斯管道 2.150.2 InfluxDB 1.6.2
任何的意见都将会有帮助。我是这个话题的新手。
注意:我已经评论了@NonCPS 注释。如果我取消注释,那么它只发送第一阶段数据并退出并且无法迭代具有 20 个阶段数据的循环。
//Maps for Field type columns
myDataField1 = [:]
myDataField2 = [:]
myDataField3 = [:]
//Maps for Custom Field measurements
myCustomDataFields1 = [:]
myCustomDataFields2 = [:]
myCustomDataFields3 = [:]
//Maps for Tag type columns
myDataTag1 = [:]
myDataTag2 = [:]
myDataTag3 = [:]
//Maps for Custom Tag measurements
myCustomDataTags1 = [:]
myCustomDataTags2 = [:]
myCustomDataTags3 = [:]
//@NonCPS
def pushStageData() {
def url_string = "${JENKINS_URL}job/ENO_ENG_TP/job/R421/13/wfapi/describe"
def get = new URL(url_string).openConnection();
get.addRequestProperty ("User-Agent","Mozilla/4.0");
get.addRequestProperty("Authorization", "Basic dZXZvceDIwMTk=");
//fetching the contents of the endpoint URL
def jsonText = get.getInputStream().getText();
//converting the text into JSON object using
JsonSlurperClassic
def jsonObject = new JsonSlurperClassic().parseText(jsonText)
// Extracting the details of all the stages present in that particular build number
for (int i=0; i<jsonObject.stages.size()-1; i++){ //size-1 to ignore the post stage
//populating the field type columns of InfluxDB measurements and pushing them to the map called myDataField1
def size = jsonObject.stages.size()-1
myDataField1['result'] = jsonObject.stages[i].status
myDataField1['duration'] =
jsonObject.stages[i].durationMillis
myDataField1['stage_name'] = jsonObject.stages[i].name
//populating the tag type columns of InfluxDB
measurements and pushing them to the map called
myDataTag1
myDataTag1['result_tag'] = jsonObject.stages[i].status
myDataTag1['stage_name_tag'] = jsonObject.stages[i].name
//assigning field type columns to the measurement called CustomData
myCustomDataFields1['CustomData'] = myDataField1
//assigning tag type columns to the measurement called CustomData
myCustomDataTags1['CustomData'] = myDataTag1
//Push the data into influx instance
try
{ step([$class: 'InfluxDbPublisher', target: 'jenkins_data', customPrefix: null, customDataMapTags: myCustomDataTags1]) }
catch (err)
{ println ("pushStagData exception: " + err) }
}
}
预期:我想将jenkins管道数据的每个阶段推送到influx db。
解决方案
尝试使用 jenkins 的标准方法,而不是手动创建对象。您可以使用httpRequest代替 URL。这应该可以解决您遇到的异常。您还可以使用readJson代替 JsonSlurperClassic(后者是可选的,因为经典 slurper 实际上是可序列化的)。
推荐阅读
- mongodb - 如何使用 DBRef 查询 MongoDB?
- python - 如何将节点字典转换为二叉树?[Python]
- css - 单击“input-group-btn”时无法提交表单
- python - Pandas Crosstab 与 Pandas cut 一起使用时:输出交叉表的行名不匹配
- ios - UIStackview 隐藏标签时不调整大小
- python - Django - create child models
- python - 我怎样才能让这些代码只返回一次?
- javascript - NodeJS:从父级访问子级的静态方法
- mysql - 如何获取存储在 MySQL 表的列中的 varchar 值的最大字符数?
- python - Python 3 中的导入错误