Этого легко добиться с помощью простого скрипта на Python и API-интерфейса Jenkins JSON REST.
1.Prerequisites
Python 2.7 или 3.x и python-запросы установленная библиотека:
pip install requests
Для Python 3.x
pip3 install requests
Также: Как установить pip
2.Python-скрипт для извлечения сборок между датами
import requests
from datetime import datetime
jenkins_url = "JENKINS_HOST"
username = "USERNAME"
password = "PASSWORD"
job_name = "JOB_NAME"
stop_date = datetime.strptime('23.11.2018 0:30:00', "%d.%m.%Y %H:%M:%S")
start_date = datetime.strptime('10.11.2018 18:46:04', "%d.%m.%Y %H:%M:%S")
request_url = "{0:s}/job/{1:s}/api/json{2:s}".format(
jenkins_url,
job_name,
"?tree=builds[fullDisplayName,id,number,timestamp,url]"
)
response = requests.get(request_url, auth=(username, password)).json()
builds = []
for build in response['builds']:
build_date = datetime.utcfromtimestamp(build['timestamp']/1000)
if build_date >= start_date and build_date <= stop_date:
builds.append(build)
print("Job name: {0:s}".format(build["fullDisplayName"]))
print("Build number: {0:d}".format(build["number"]))
print("Build url: {0:s}".format(build["url"]))
print("Build timestamp: {0:d}".format(build["timestamp"]))
print("Build date: {}\n".format(build_date))
Вышеописанный скрипт работает как с python 2.7, так и с 3.x. Теперь небольшое объяснение:
Сначала загрузите все данные сборки, используя JSON API, и загрузите ответ как JSON. Затем для каждой сборки преобразуйте свою временную метку в дату и сравните ее с датами начала и окончания. Обратите внимание, что важно делить отметку времени на 1000, чтобы получить секунды, а не миллисекунды (в противном случае преобразование даты из отметки времени вызовет ValueError).
Пример вывода:
$ python test.py
Job name: Dummy #21
Build number: 21
Build url: http://localhost:8080/job/Dummy/21/
Build timestamp: 1541875585881
Build date: 2018-11-10 18:46:25
Job name: Dummy #20
Build number: 20
Build url: http://localhost:8080/job/Dummy/20/
Build timestamp: 1541875564250
Build date: 2018-11-10 18:46:04
С другой стороны, если вы хотите указать даты начала и окончания в другом формате, помните, что вам нужно настроить параметр формата в функции strptime()
. Директивы Python datetime.
Несколько примеров:
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")
3.Python-скрипт для получения сборки с точной датой
Если вы хотите найти сборку по ее точной дате, просто замените эту строку:
if build_date >= start_date and build_date <= stop_date:
с этим:
if build_date == date:
, где date
- конкретная дата сборки.
Обратите внимание! , что если вы хотите найти сборку по точной дате, вам нужно предоставить date
в правильном формате. В этом случае это "%d.%m.%Y %H:%M:%S"
. Пример:
datetime.strptime('10.11.2018 18:46:04', "%d.%m.%Y %H:%M:%S")
В противном случае, даже если для python даты будут одинаковыми с определенной точкой (минуты, часы, дата и т. Д.), Они не будут равны датам.
Если вы хотите указать другой формат, вам нужно настроить его для переменной build_date
.
build_date.strftime('%d %m,%Y')