Как исправить исключение java.io.NotSerializable при отправке данных каждого этапа из конвейера jenkins в приток базы данных? - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь перенести данные с этапа из конвейера Jenkins в поток db, и я получаю проблему, как показано ниже

Проблема: в 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) }
}
}

Ожидается: я хочу подтолкнуть каждую стадию данных конвейера Дженкинса к притоку в дБ.

1 Ответ

0 голосов
/ 01 мая 2019

Попробуйте использовать стандартные методы Дженкинса вместо создания объектов вручную. Вы можете использовать httpRequest вместо URL. Это должно исправить исключение, которое вы получаете. Вы также можете использовать readJson вместо JsonSlurperClassic (последнее необязательно, поскольку классический slurper фактически сериализуем).

...