因为工作中发生过很严重的 Regression Issue,当时的解决方案是在Daily Build中使用二分法找到出问题的Build, 过程比较繁琐,所以就有了这么个需求,要求记录Daily Build的git changes信息

Jenkins REST API可以获取到Build信息, 获取方式为

https://<your-jenkins-server>/job/<job-name>/<buildnumber>/api/json

也就是在某个项目的Build的url里加上/api/json即可

如果不知道Build number只想获取最新的build number信息, 可以使用 xxx/lastBuild/api/json

然后我们解析该json内容就可以获取到相应的Git changes信息了,另外还需要做一些Git判断

集成到Jenkins中还是使用Python脚本更方便,这里需要用到 GitPythonrequests,基于Python 3环境

pip install GitPython
pip install requests

changes.py文件代码如下

# Use Jenkins REST API to get changes info
# install requests - pip install requests
# install GitPython  - pip install GitPython
from logging import fatal
import requests
import argparse
import json
from git import Repo#### 将字符串List写入文件中
def writeChangesToFile(url, repo_path, branch_name, file_path):f = open(file_path, mode="w+", encoding="UTF-8")info_list = parseJson(url,repo_path)main_info = getMainInfo(branch_name,url)f.write(main_info)f.write("\n\n")if len(info_list) == 0:f.write("No changes!")else:for line in info_list:if info_list.index(line) == 0:f.write(line)else:f.write("\n")f.write(line)print(line)f.close()#### 获取主要信息
def getMainInfo(branch_name, url):return "Branch name: {_branch_name}\nDetail: {_url}".format(_branch_name=branch_name, _url = url)#### 获取URL页面的Json内容
def getJsonInfo(jsonURL):json_str = requests.get(jsonURL,verify=False).textreturn json.loads(json_str)#### 将满足要求的Json字符串转化成字符串List
def parseJson(url, repo_path):text_list = []items = getRepoItems(url, repo_path)if(len(items)==0):return []counter = 1for item in items:msg = item["msg"]author_name = item["author"]["fullName"]affectedPaths = item["affectedPaths"]path_str = ""for path in affectedPaths:if affectedPaths.index(path) == len(affectedPaths) - 1:path_str += "        - " +  pathelse:path_str += "        - " + path + "\n"if items.index(item) == len(items) - 1:line = "{_counter}. {_msg} - {_author}\n{_path_str}".format(_counter=counter, _msg=msg, _author=author_name,_path_str = path_str)else:line = "{_counter}. {_msg} - {_author}\n{_path_str}\n".format(_counter=counter, _msg=msg, _author=author_name,_path_str = path_str)text_list.append(line)counter +=1return text_list#### 获取这个Repo的Items
def getRepoItems(url, repo_path):earth_items = []try:json_text = getJsonInfo(url)# 这里或许有多个Git Repo,获取该Repo的Itemsif "changeSets" in json_text:changeSets = json_text["changeSets"]for changeSet in changeSets:items = changeSet["items"]for item in items:commitID = item["commitId"]if isRepoCommit(commitID, repo_path):earth_items.append(item)else:earth_items = json_text["changeSet"]["items"]except:print("getRepoItems has a error")return earth_items#### 判断Jenkins REST API获取到的commit信息是否是该Repo的commit
def isRepoCommit(commit_id,repo_path):repo = Repo(repo_path)commits = list(repo.iter_commits())for commit in commits:if commit_id == commit.hexsha:return Truereturn False#### 命令行使用带参数的python文件
def getArgs():parser = argparse.ArgumentParser()parser.add_argument("url")parser.add_argument("repo_path")parser.add_argument("branch_name")parser.add_argument("output_file")args = parser.parse_args()return argsif __name__ == "__main__":#url = "xxxx/_Daily_Build/197/api/json"#repo = "D:\\Coding\jenkins-scripts\\.git"#writeChangesToFile(url, repo,"develop", "changes.txt")writeChangesToFile(getArgs().url, getArgs().repo_path, getArgs().branch_name, getArgs().output_file)

用命令行的使用方式如下,注意repo的指向是.git文件 , 所有changes信息就会写入changes.txt中

changes.py "xxx/lastBuild/api/json" "D:\repo\test\.git" "develop" "D:\Temp\commitInfo.txt"

使用Python和Jenkins REST API获取git changes信息相关推荐

  1. Python 使用 twitter API 获取twitter用户信息

    Python 使用 twitter API 获取twitter用户信息 1. 概述 twitter作为国外极其大众化的社交平台,具有大量的海外用户,平台流动数据量极大,是国外人群生活数据的重要来源之一 ...

  2. Python3 | 通过百度地图API获取商家详细信息(包括店名,地址,经纬度,电话)

    一.打开百度地图开放平台,选择Web服务API . ​​​​​​官方文档对API接口的调用描述的比较详细,在调用之前先要申请百度地图的账号,然后申请密钥,获取密钥的步骤官方也有说明. 二.通过百度地图 ...

  3. 百度地图利用位置提供服务器,利用百度地图API获取当前位置信息的实例

    利用百度地图API可以做很多事情,个人感觉最核心也是最基础的就是定位功能了.这里分享一个制作的JS可以实现登录网页后定位: var map; var gpsPoint; var baiduPoint; ...

  4. 小程序笔记(9)调用腾讯api获取周边饮食店信息

    调用腾讯api获取周边饮食店信息 实现功能 实现流程 基本逻辑实现 开始注册key 开始代码 先配置app.json中的权限获取 index.wxml index.wxss index.jssssss ...

  5. Python小工具——通过API获取天气预报

    Python通过API获取天气预报 闲来无事,用Python实现了一个小工具,通过实现API来获取当前的天气预报. 获取API的key 在阿凡达数据上查找天气预报相关的API,注册申请可获得一个key ...

  6. python地图 两点距离_使用Python调用百度地图Api获取两地距离

    完整代码可以关注公众号:Romi的杂货铺 1.获取百度api接口 首先需要在百度的公众平台http://lbsyun.baidu.com/上点击控制台,如果是新用户的话需要进行注册和验证.注册和验证完 ...

  7. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  8. JavaScript使用百度地图API获取当前位置信息

    使用步骤: 一.百度开放API平台申请AK 二.在线引入API 或者使用 npm 三.使用API获取位置 注意:百度API. 高德API 商业用途,均需授权 引用与配置 方式一 .在线引入API: & ...

  9. fastlane提交AdHoc测试包到蒲公英平台,获取git提交信息展示到更新说明中

    直接上fastlane文件配置(Fastfile中的代码) desc "发布一个测试版本到蒲公英" lane :pgy do |options|match(type: " ...

最新文章

  1. 属性为nil的时候测试是否crash  nil是不会崩溃的
  2. python的input()函数与getpass标准库
  3. SpringMVC中的数据校验
  4. leetcode 滑动窗口小结 (一)
  5. V210 UART TX 流程
  6. Dubbo_异常_Service启动时默认将方法注册到内网IP
  7. 如何反编译APK文件
  8. Git:如何在本地没有分支时,切换分支
  9. python语言的主网址-python如何获得一个url地址对应的跳转后的最终网址
  10. AZPR3.0的脱壳教程.
  11. python商业爬虫学徒计划_(教程)下载:麻瓜编程Python商业爬虫学徒计划麻瓜编程的视频python办公自动化麻瓜...
  12. PC 护眼模式(凑合用)
  13. 权游谁将领盒饭?AI告诉你
  14. xinetd 服务
  15. python基础课项目练习
  16. mysql ignore详解_MySQL replicate-ignore-db详解
  17. 初生牛犊式工作流系统
  18. Adobe Dreamweaver CC 2020中文版
  19. 让linux后台持续运行某个程序
  20. 后端接口返回一张图片

热门文章

  1. socket5代理简单使用
  2. 我的世界中国版java模组_我的世界中国版下载,我的世界中国版下载不了mod
  3. 关于三次握手与四次挥手面试官想考我们什么?--- 不看后悔系列
  4. 对于创业者,是该设立个体?个人独资企业?还是企业?
  5. vant UI 使用 ImagePreview 预览图片
  6. SpringBoot教程(10) Jackson ObjectMapper使用和常用注解
  7. macOS 上好用的字体软件 FontLab VI
  8. 2022年首个交易日特斯拉股价暴涨 马斯克重回3000亿美元身价
  9. 基于内容的推荐算法详解+问题思考
  10. 使用Python的turtle模块绘画五角星