这可以通过简单的 python 脚本和 Jenkins JSON REST API 轻松实现。
1.先决条件
已安装 Python 2.7 或 3.x 和 python requests 库:
pip install requests
对于 python 3.x
pip3 install requests
还有:How to install 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 directives.
几个例子:
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')