Eva
Eva

Reputation: 593

How to Print stage information using python Jenkins api

I am trying to use Jenkins python api to retrieve all the Job runs for a particular Job like, if the job is successful or if the job is failed I need to know at what stage it failed. Currently I am able to get, if the job is successful or failure. I am unable to get the stage at which job failed.

import jenkins
import re
from datetime import datetime


startDate = int(datetime(2019, 8, 18).strftime('%s'))
endDate = int(datetime(2019, 8, 21).strftime('%s'))

server = jenkins.Jenkins('jenkins_url', username='admin',
                         password='admin')

info = server.get_job_info(jobname)

TotalSuccess=0
TotalFailure=0
TotalAborted=0
TotalNone=0
TotalUNKNOW=0
TotalUnstable=0
builds = info['builds']
for build in builds:
    BuildStatus=server.get_build_info(jobname, build['number'])
    Result=BuildStatus['result']
    BuildNumber=BuildStatus['number']
    TimeStamp=BuildStatus['timestamp']
    TimeStamp=TimeStamp/1000
    build_date=datetime.utcfromtimestamp(TimeStamp).strftime('%Y-%m-%d %H:%M:%S')
    if (TimeStamp > startDate) & (TimeStamp < endDate):
        print ("Result=",Result,"BuildID=",BuildNumber,'Build Time: ',str(build_date))
        if Result == "SUCCESS":
            TotalSuccess += 1
        elif Result == "UNSTABLE":
            TotalUnstable += 1
        elif Result == "FAILURE":
            TotalFailure += 1
        elif Result == "ABORTED":
            TotalAborted += 1
        elif Result == "None":
            TotalNone += 1
        else:
            TotalUNKNOW += 1
    else:
        break

print ("Total Number of Success Builds=",TotalSuccess)
print ("Total Number of UnStable Builds=",TotalUnstable)
print ("Total Number of Failure Builds=",TotalFailure)
print ("Total Number of Aborted Builds=",TotalAborted)
print ("Total Number of Unknown Builds=",TotalUNKNOW)
print ("On Going Builds=",TotalNone)

Current Output

Result= None BuildID= 196 Build Time:  2019-08-26 23:14:50
Result= SUCCESS BuildID= 195 Build Time:  2019-08-26 17:16:20
Result= SUCCESS BuildID= 194 Build Time:  2019-08-24 22:00:13
Result= SUCCESS BuildID= 193 Build Time:  2019-08-24 12:53:26
Result= FAILURE BuildID= 192 Build Time:  2019-08-24 07:00:11
Total Number of Success Builds= 3
Total Number of UnStable Builds= 0
Total Number of Failure Builds= 1
Total Number of Aborted Builds= 0
Total Number of Unknown Builds= 1
On Going Builds= 0

Expected

Result= None BuildID= 196 Build Time:  2019-08-26 23:14:50 StageFailed= None
Result= SUCCESS BuildID= 195 Build Time:  2019-08-26 17:16:20 StageFailed= NONE 
Result= SUCCESS BuildID= 194 Build Time:  2019-08-24 22:00:13 StageFailed= NONE
Result= SUCCESS BuildID= 193 Build Time:  2019-08-24 12:53:26 StageFailed= NONE
Result= FAILURE BuildID= 192 Build Time:  2019-08-24 07:00:11 StageFailed= deploy 
Total Number of Success Builds= 3
Total Number of UnStable Builds= 0
Total Number of Failure Builds= 1
Total Number of Aborted Builds= 0
Total Number of Unknown Builds= 1
On Going Builds= 0

Upvotes: 1

Views: 2012

Answers (1)

Satender346
Satender346

Reputation: 352

You can use wfapi to get stage names and build information.

import requests

url = "https://my-jenkins-url/job/<job-name>/lastBuild/wfapi/"
response = requests.request("GET", url)
data = response.json()
print (data['stages'])
print (data['id'])
print (data['status'])


Output:
id': '88', 'name': 'example_stage_name', 'execNode': '', 'status': 'SUCCESS', 'startTimeMillis': 1580767070144, 'durationMillis': 140011, 'pauseDurationMillis': 0},'SUCCESS', 'startTimeMillis': 1580795569817, 'durationMillis': 32985, 'pauseDurationMillis': 0}, 

386

FAILED

Upvotes: 2

Related Questions