python - 如何使用 python Jenkins API 在特定日期之间获取所有这些构建编号?
解决方案
你可以通过使用 Jenkins JSON REST API 和 pythonrequest
库来做到这一点:
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")
推荐阅读
- php - 循环输出结果
- django - 如何将 ModelForm 与 django-address 一起使用?
- python - 在 Python 中用多个高斯轮廓拟合数据
- c# - 如何在 c# 窗口窗体中删除 DataGridView 中没有标题的无标题列
- sqlite - SQLite中是否有类似if的条件结构(不同情况下的不同语句)?
- java - ChannelGroup 和 ArrayList 有什么区别
? - java - 使用 jdt 为 java 程序构建自定义的 AST 表示
- javascript - 更改输入类型文件占位符
- javascript - React 中的下拉菜单未显示
- python - 如何使用 Python 3.7 安装 MATLAB Engine API for Python?