需求是这样的 我们使用了jacoco统计应用的代码覆盖率,产生了一些报告,但是清理报告的时候,需要对本轮的报告
做一个备份,这个同样适用于类似的情形,比如一些重要的文件,目标是备份到jenkins所在的服务器上
如下图
比如我要获取或者说是下载右上角的文件,备份到下图中的当前jenkins job的工作空间里面
url 如下
http://jenkins-test.yourcompany.com/view/projectName/job/xxx-web-report/HTML_20Report/*zip*/HTML_20Report.zip
下图也是一个最终的效果
计划使用python脚本 集成到一个jenkins job里面
首先发现python 有库可以操作jenkins ,Using Python-Jenkins
,https://python-jenkins.readthedocs.io/en/latest/examples.html
进一步发现不太合适 这个库主要是操作jenkins job 之类的api 没有涉及到下载之类
然后考虑直接使用http 获取文件,然后尝试发现jenkins 有basic-auth 验证
可以使用如下通过校验
# 用户名 | |
user_id = 'jiangfei' | |
# 用户的token值(每个user有对应的token) | |
api_token = 'yourtoken' | |
auth = HTTPBasicAuth(user_id, api_token) | |
res = requests.get(url=urlFile, auth=auth) |
用户名和token 在jenkins这里获取
主体代码如下
# paramNum ==2时候是只有job名 ==3时候 最后一个参数是group name名字
paramNum = len(sys.argv)
print(paramNum)
jobName = sys.argv[1]
# 3 参数带group name
if paramNum == 3:
groupName = sys.argv[2]
# groupName为空
if paramNum == 2:
urlFile = 'http://jenkins-test.你的jenkins域名.com/job/'+jobName+'/HTML_20Report/*zip*/HTML_20Report.zip'
elif paramNum == 3:
urlFile = 'http://jenkins-test.你的jenkins域名.com/view/' + groupName + '/job/' + jobName + '/HTML_20Report/*zip*/HTML_20Report.zip'
# 用户名
user_id = 'jiangfei'
# 用户的token值(每个user有对应的token)
api_token = 'yourtoken'
auth = HTTPBasicAuth(user_id, api_token)
res = requests.get(url=urlFile, auth=auth)
nowTime = str(datetime.datetime.now()). replace(':', "").replace(' ', "-").replace('.', "")
print(nowTime)
# 文件获得后存放在自己工程在jenkins的工作空间里面
fileReportPath = "/data/test_jenkins/workspace/" + jobName
# 也可以放在jenkins服务的一个具体路径下面 比如
# fileReportPath = "/qa/reportHistory/" + jobName
if not os.path.exists(fileReportPath):
os.makedirs(fileReportPath)
with open(fileReportPath + "/" + jobName + nowTime+".zip", "wb") as code:
code.write(res.content)
大家可以根据自己情况做一些调整 这个例子还是带了一些业务代码。
完整代码参考我的github
https://github.com/albertflyer/GetJenkinsFile
参考:
https://www.jianshu.com/p/be1d2f19c9ed
https://hacpai.com/article/1484722904667
https://www.cnblogs.com/zjsupermanblog/archive/2017/07/26/7238422.html