我目前的詹金斯(Jenkins)有大量工作。不同的文件夹,每个文件夹都有多个作业。我最近看到一个Jenkins从属服务器(已自动缩放)在特定时间向另一台服务器发送过多请求。但是,如果不手动检查它们,便无法找到在特定时间运行的构建。是否可以使用API / Groovy脚本获取此信息?
答案 0 :(得分:1)
我写了一个很小的bash脚本,在jenkins服务器上运行以解析日志文件。
仅查看作业开始时间是不够的。一项工作可能在您的时间窗口之前开始,甚至在您的时间窗口之后结束;它仍会在您的时间范围内运行。
#!/bin/bash
start=$1
end=$2
for build_xml in jobs/*/branches/*/builds/*/build.xml
do
startTime=$(sed -n -e "s/.*<startTime>\(.*\)<\/startTime>.*/\1/p" $build_xml)
modificationTime=$(date '+%s' -r $build_xml)
if [[ $modificationTime > $start ]] && [[ $startTime < $end ]]
then
echo "START $(date -d @${startTime::-3}) END $(date -d @$modificationTime) : $build_xml"
fi
done
用法:
./getBuildsRunningBetween.sh 1565535639 1565582439
将给出:
START Sun Aug 11 20:29:00 CEST 2019 END Sun Aug 11 20:30:20 CEST 2019 : jobs/job-name/branches/branch-name/builds/277/build.xml
答案 1 :(得分:0)
使用以下Jenkins API,可以基于称为动画的颜色分类找到正在运行的作业。
“ Jenkins主机网址” / api / xml?tree = jobs [name,url,color]&xpath = / hudson / job [ends-with(color / text(),%22_anime%22)]&wrapper = jobs < / p>
蓝色的正在运行
blue_anime
答案 2 :(得分:0)
这可以通过简单的python脚本和Jenkins JSON REST API轻松实现。
1。先决条件
已安装Python 2.7或3.x和python requests库:
pip install requests
对于python 3.x
pip3 install requests
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')