Как я могу получить все эти числа сборки между определенной датой, используя Python Jenkins API?

Например, у меня есть куча сборок между 22 и 23. Как я могу получить все эти числа сборок между определенной датой, используя Python Jenkins API?

введите описание изображения здесь

2 ответа

import jenkins
from datetime import datetime

jenkins_url=''
username=''
password=''
job_name=''

# Fill up your dates in below fields. 
startDate = int(datetime(2018, 10, 20).strftime('%s'))
endDate = int(datetime(2018, 11, 25).strftime('%s'))



server = jenkins.Jenkins(jenkins_url,username,password)
job_info=server.get_job_info(job_name)

#get the number of finished builds of the job
total_builds=job_info['lastBuild']['number']


for build_number in range(1, total_builds):
    # get build info for every build number. 
    build_info = server.get_build_info(job_name, build_number) 
    timestamp=build_info['timestamp']
    timestamp=timestamp/1000        # The timestamp returned by Jenkins api is in miliseconds
    build_date=datetime.utcfromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
    if (timestamp > startDate) & (timestamp < endDate):
            print 'Build Time: '+str(build_date)

Это сработало для меня. Я надеюсь, что это подходит и для вас. Спасибо:)

Вы можете сделать это так, используя Jenkins JSON REST API и python request библиотека:

import requests
from datetime import datetime

# Provide following data:
jenkins_url = "YOUR_JENKINS_URL"
username = "USERNAME"
password = "PASSWORD"
job_name = "JOBNAME"
stop_date = datetime.strptime("23.11.2018 0:30", "%d.%m.%Y %H:%M")
start_date = datetime.strptime("22.11.2018 17:30", "%d.%m.%Y %H:%M")

# Downloading all builds data in one request
request_url = "{0:s}/job/{1:s}/api/json{2:s}".format(
    jenkins_url,
    job_name,
    "?tree=builds[fullDisplayName,id,number,timestamp]"
)

response = requests.get(request_url, auth=(username, password)).json()
builds = []

for build in response["builds"]:
    # Convert build timestamp to datetime
    build_date = datetime.utcfromtimestamp(build["timestamp"]/1000)
    # Compare build datetime with provided dates range
    if build_date > start_date and build_date < stop_date:
        # Do stuff with builds which fits dates range
        builds.append(build)

print(builds)

Вышеописанный скрипт работает как с Python 2.7, так и с 3.x. Теперь небольшое объяснение:

Сначала загрузите все данные сборки, используя JSON API, используя requests библиотека (Это может понадобиться для того, чтобы скрипт работал. Для установки наберите: pip install requests) и загрузить ответ как JSON. Затем для каждой сборки преобразуйте свою временную метку в дату и сравните с датами начала и окончания. Обратите внимание, что важно делить отметку времени на 1000, чтобы получить секунды, а не миллисекунды (в противном случае преобразование даты из отметки времени вызовет ValueError).

Пример вывода:

$ python test.py 
[{u'timestamp': 1541875585881, u'_class': u'hudson.model.FreeStyleBuild', u'number': 21, u'fullDisplayName': u'Dummy #21', u'id': u'21'}, {u'timestamp': 1541875564250, u'_class': u'hudson.model.FreeStyleBuild', u'number': 20, u'fullDisplayName': u'Dummy #20', u'id': u'20'}, {u'timestamp': 1541875506564, u'_class': u'hudson.model.FreeStyleBuild', u'number': 19, u'fullDisplayName': u'Dummy #19', u'id': u'19'}, {u'timestamp': 1541875472100, u'_class': u'hudson.model.FreeStyleBuild', u'number': 18, u'fullDisplayName': u'Dummy #18', u'id': u'18'}]
$ python3 test.py 
[{'_class': 'hudson.model.FreeStyleBuild', 'fullDisplayName': 'Dummy #21', 'id': '21', 'number': 21, 'timestamp': 1541875585881}, {'_class': 'hudson.model.FreeStyleBuild', 'fullDisplayName': 'Dummy #20', 'id': '20', 'number': 20, 'timestamp': 1541875564250}, {'_class': 'hudson.model.FreeStyleBuild', 'fullDisplayName': 'Dummy #19', 'id': '19', 'number': 19, 'timestamp': 1541875506564}, {'_class': 'hudson.model.FreeStyleBuild', 'fullDisplayName': 'Dummy #18', 'id': '18', 'number': 18, 'timestamp': 1541875472100}]

С другой стороны, если вы хотите указать даты начала и окончания в другом формате, помните, что вам нужно настроить параметр формата в strptime() функция. Директивы даты и времени Python.

Несколько примеров:

datetime.strptime("23.11.2018", "%d.%m.%Y")
datetime.strptime("2018.11.23", "%Y.%m.%d")
datetime.strptime("Jun 1 2005  1:33PM", "%b %d %Y %I:%M%p")
Другие вопросы по тегам