如何在将每个阶段数据从jenkins管道推送到流入数据库时 修复java.io.NotSerializable异常?

问题描述 投票:0回答:1

我正在尝试将Jenkins管道中的阶段数据推送到流入数据库,我得到如下问题

问题:在jenkin构建控制台输出中,在每个阶段之后,我看到:java.io.NotSerializableException:sun.net.www.protocol.http.HttpURLConnection

Jenkins管道2.150.2 InfluxDB 1.6.2

任何的意见都将会有帮助。我是这个话题的新手。

注意:我评论了@NonCPS注释。如果我取消注释,那么它仅发送第一阶段数据并退出并且无法迭代for循环,其具有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管道数据的每个阶段推送到Influxdb。

jenkins groovy jenkins-pipeline influxdb jenkins-groovy
1个回答
0
投票

尝试使用jenkins的标准方法,而不是手动创建对象。您可以使用httpRequest而不是URL。这应该可以解决您遇到的异常问题。您也可以使用readJson而不是JsonSlurperClassic(后者是可选的,因为经典的slurper实际上是可序列化的)。

© www.soinside.com 2019 - 2024. All rights reserved.