CN110286880A - 一种面向GitHub与Travis CI的完整持续集成数据收集方法 - Google Patents
一种面向GitHub与Travis CI的完整持续集成数据收集方法 Download PDFInfo
- Publication number
- CN110286880A CN110286880A CN201910519306.0A CN201910519306A CN110286880A CN 110286880 A CN110286880 A CN 110286880A CN 201910519306 A CN201910519306 A CN 201910519306A CN 110286880 A CN110286880 A CN 110286880A
- Authority
- CN
- China
- Prior art keywords
- code
- github
- travis
- information
- submitted
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/10—Requirements analysis; Specification techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供一种面向GitHub与Travis CI的完整持续集成数据收集方法,持续监控目标项目在Travis CI上的构建活动,下载并保存新的构建记录,根据新的构建记录从GitHub上精准收集对应的未被收集的代码提交记录。相比于现有技术,本发明能够完整地收集面向GitHub与Travis CI的持续集成数据。
Description
技术领域
本发明涉及软件开发数据收集领域,尤其涉及一种面向GitHub与Travis CI的完整持续集成数据收集方法。
背景技术
软件开发活动数据是软件项目在开发过程中各种开发工具自动记录的数字化的各类开发活动历史。
软件开发活动数据可以用来分析软件开发实践获取相关洞察帮助软件项目提高开发效率和质量。
持续集成数据是软件项目所使用的持续集成工具及版本控制工具所记录的持续集成活动历史。
GitHub是目前一种主流的线上协作平台,该平台的代码变更管理基于Git版本控制系统实现,开发者所提交的代码变更被称为代码提交(commit),Travis CI是常常与GitHub共同使用的一种主流的线上持续集成工具,用于自动检查新的代码提交是否存在质量缺陷。
GitHub与Travis CI均提供了REST API,两个平台上的持续集成数据也都是开放的,可以使用这些API获取。
由于GitHub所记录的部分代码提交历史会被开发者或者GitHub平台删除,能够被收集到的历史持续集成数据常常是不完整的。
目前,面向GitHub与Travi sCI进行持续集成数据收集的有TravisTorrent项目(https://travistorrent.testroots.org/),而该项目在数据收集中并没有对上述历史数据不完整问题提出有针对性的方法,而是使用虚拟数据弥补已发现的数据遗漏,这在一定程度上造成了该项目所收集的数据不准确的问题。
本发明通过监控式的、持续的、增量式的数据收集方法,有效解决了数据不完整的问题。
发明内容
本发明所要解决的技术问题是:克服现有的持续集成数据易失性所引起的数据收集不完整问题,提供一种面向GitHub与Travis CI的完整持续集成数据收集方法。
本发明技术解决方案:一种面向GitHub与Travis CI的完整持续集成数据收集方法,包括:
(1)设置需要收集持续集成数据的目标项目,包括目标项目在GitHub与TravisCI上的ID;
(2)以一小时一次的频率,使用Travis CI的项目构建记录查询接口轮询目标项目的线上构建记录,以此实现持续地监控目标项目在Travis CI上的新构建,在每一轮查询中,首先查询线上构建记录的第一页,对比已收集的构建记录,如果没有新的构建记录则停止,否则继续查询下一页并保存新的构建记录;
(3)从步骤(2)收集到的每一条构建记录中抽取该次构建的代码版本所对应的GitHub中代码提交(commit)的ID;
(4)对于步骤(3)中提取的每一个代码提交ID,如果本地没有保存该代码提交的信息则使用GitHub的代码提交查询接口获取其详细信息并保存,同时检查本地是否保存其父代码提交信息,如果没有则继续查询并保存其父代码提交信息,依此类推,直到本地已保存了正在查询的代码提交的父代码提交信息或正在查询的代码提交无父代码提交,以此实现增量式的精准代码提交数据获取,即获取且仅获取新增代码提交的信息。
本发明与现有技术相比的优点在于:
(1)有效解决了持续集成历史数据易失的问题,通过本发明收集的数据能够真实反映目标项目过去的持续集成活动,基于这些数据所得的分析结果更为可靠。
(2)持续的数据收集过程中避免了已有数据的重复收集,减小了收集代价和对GitHub及Travis CI服务的访问负载。
(3)本发明通过以一定的时间间隔查询是否有新的持续集成活动发生来决定是否启动所有数据收集程序,这种监控的方法是现有TravisTorrent项目所不具备的,该方法的开销极小,每次查询仅需一个Http请求即可,这也使得持续地、近乎实时地收集持续集成活动所产生的数据成为可能,而实时的数据收集避免了历史数据可能被随时删除而遗失的问题。
(4)此外,本发明的代码提交数据收集程序按照代码提交的逻辑顺序逆序遍历代码提交历史,这确保了本发明能够直接定位到新增的代码提交,并且仅获取新增代码提交的信息,相比于直接使用Git的clone方法获取整个版本控制仓库,这种方法避免了已有数据的重复收集,效率更高,例如,在常见带宽条件下,使用clone方法获得Ruby onRails(https://github.com/rails/rails)这样量级项目的所有代码提交需要数分钟,而使用本发明的方法获取新增代码提交只需数秒。
附图说明
图1为本发明的一种面向GitHub与Travis CI的完整持续集成数据收集方法实施例的步骤流程图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明的核心思想在于持续地监控持续集成活动并及时获取相关的信息以保证数据的完整性。
如图1所示,本发明一种面向GitHub与Travis CI的完整持续集成数据收集方法实施例的步骤流程图,可以包括以下步骤:
步骤11,设置需要收集持续集成数据的目标项目;
设置内容包括目标项目在GitHub与Travis CI上的ID,该ID的格式为“代码仓库拥有者用户名/代码仓库名称”,基于该ID即可使用GitHub和Travis CI所提供的RESTAPI进行后续数据的查询与下载。
步骤12,通过持续查询的方式监控目标项目在Travis CI上的新构建并保存构建记录;
优选地,以一小时一次的频率,使用Travis CI的项目构建记录查询接口轮询目标项目的构建记录。
构建记录查询接口为:https://api.travis-ci.com/repos/代码仓库拥有者用户名/代码仓库名称/builds。
查询可以通过任意一种HTTP请求发送和HTTP响应接收工具、程序库或程序包实现。
优选地,在本实施例中通过Python内置的urllib和urllib2模块实现HTTP请求发送和HTTP响应接收。
Travis CI返回的构建记录为json格式。
优选地,在本实施例中通过Python内置的json模块实现对json数据的解析。
每条构建记录主要包括以下内容:
(1)Travis CI赋予的永久的构建记录ID;
(2)Travis CI赋予的永久的构建记录编号;
(3)构建的执行结果(成功/失败/错误/取消);
(4)构建的执行时间;
(5)构建开始时间;
(6)构建结束时间;
(7)构建的代码版本所对应的代码提交ID;
(8)构建的详细日志;
在本发明的一种优选实施例中,所述步骤12可以包括如下子步骤:
子步骤S11,查询线上构建记录第一页,对比已收集的构建记录,如果没有新的构建记录则停止;否则进行子步骤S12;
子步骤S12,保存查询到的新的构建记录,查询下一页,对比已收集的构建记录,如果没有新的构建记录则停止;否则继续进行子步骤S12。
步骤13,获取新的构建的代码版本所对应的代码提交ID;
从步骤12收集到的每一条构建记录中抽取代码版本所对应的代码提交ID。
步骤14,在GitHub上通过反向遍历迭代查询并保存新增代码提交的信息,以此实现增量式的代码提交数据获取。
Git中代码提交的逻辑顺序可以表达为一种有向无环图,除仓库中的第一次代码提交外,每个代码提交至少有一个基于一个前序代码提交的代码版本,该前序代码提交即其父代码提交,通过反向遍历该有向无环图可以实现仅查询和下载新增代码提交的信息,即增量式的数据获取。例如,代码提交C和D是新增的两个代码提交,他们的父代码提交分别是A和B,其中B的父代码提交又是A。通过反向遍历,C和D会被首先访问,并且由于A和B已被下载遍历到此结束。
代码提交信息的查询接口为:https://api.github.com/repos/代码仓库拥有者用户名/代码仓库名称/commits/代码提交ID。
查询可以通过任意一种HTTP请求发送和HTTP响应接收工具、程序库或程序包实现。
优选地,在本实施例中通过Python内置的urllib和urllib2实现HTTP请求发送和HTTP响应接收。
GitHub返回的代码提交信息为json格式。
优选地,在本实施例中通过Python内置的json模块实现对json数据的解析。
每条代码提交信息主要包括以下内容:
(1)Git赋予的永久的代码提交ID;
(2)代码提交的提交者的用户名和邮箱;
(3)代码提交的提交日期;
(4)代码提交的作者信息的用户名和邮箱;
(5)代码提交的修订日期;
(6)代码提交的标题;
(7)代码提交的描述;
(8)代码提交中变更的内容。
在本发明的一种优选实施例中,所述步骤14可以包括如下反向遍历和查询目标项目新增代码提交的子步骤:
子步骤S21,对于步骤13中提取的每一个代码提交ID,如果本地没有保存该代码提交的信息则使用GitHub的代码提交信息查询接口获取其信息并保存;
子步骤S22,如果该代码提交没有父代码提交则停止,否则检查本地是否保存该代码提交的父代码提交信息,如果没有则查询并保存其父代码提交信息,并对该父代码提交执行子步骤S22,否则停止。
Claims (2)
1.一种面向GitHub与Travis CI的完整持续集成数据收集方法,其特征在于,包括以下步骤:
(1)设置需要收集持续集成数据的目标项目,设置参数包括目标项目在GitHub与Travis CI上的ID;
(2)持续地监控目标项目在Travis CI上的新构建,具体地,以设定的频率,使用TravisCI的项目构建记录查询接口轮询目标项目线上的构建记录,在每一轮查询中,首先查询线上构建记录的第一页,对比已收集的构建记录,如果没有新的构建记录则停止,否则继续查询下一页并保存新的构建记录;
(3)从步骤(2)收集到的每一条构建记录中抽取该次构建的代码版本所对应的GitHub中代码提交(commit)的ID;
(4)增量式地精准获取新增代码提交的信息,具体地,对于步骤(3)中提取的每一个代码提交ID,如果本地没有保存该ID所指的代码提交的信息,则使用GitHub的代码提交查询接口获取该代码提交的详细信息并保存,同时检查本地是否保存该代码提交的父代码提交信息,如果没有则继续查询并保存该代码提交的父代码提交信息,依此类推,直到本地已保存了正在查询的代码提交的父代码提交信息或正在查询的代码提交无父代码提交,最终获取且仅获取新增代码提交的信息。
2.根据权利要求1所述的一种面向GitHub与Travis CI的完整持续集成数据收集方法,其特征在于:步骤(2)中,设定的频率为每小时一次。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910519306.0A CN110286880B (zh) | 2019-06-17 | 2019-06-17 | 一种面向GitHub与Travis CI的完整持续集成数据收集方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910519306.0A CN110286880B (zh) | 2019-06-17 | 2019-06-17 | 一种面向GitHub与Travis CI的完整持续集成数据收集方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110286880A true CN110286880A (zh) | 2019-09-27 |
CN110286880B CN110286880B (zh) | 2020-12-01 |
Family
ID=68005032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910519306.0A Active CN110286880B (zh) | 2019-06-17 | 2019-06-17 | 一种面向GitHub与Travis CI的完整持续集成数据收集方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110286880B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112698866A (zh) * | 2021-01-06 | 2021-04-23 | 中国科学院软件研究所 | 一种基于Git的代码行生命周期追溯方法及电子装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968298A (zh) * | 2012-10-31 | 2013-03-13 | 山东浪潮齐鲁软件产业股份有限公司 | 一种软件产品构建方法 |
US20130074038A1 (en) * | 2011-09-15 | 2013-03-21 | Sonatype, Inc. | Method and system for evaluating a software artifact based on issue tracking and source control information |
CN105404584A (zh) * | 2015-11-25 | 2016-03-16 | 广州博冠信息科技有限公司 | Lpc静态代码检查方法、装置和系统 |
CN105404519A (zh) * | 2015-12-07 | 2016-03-16 | 青岛海信电器股份有限公司 | 一种版本控制方法、代码测试方法及系统 |
CN106897223A (zh) * | 2017-02-24 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种基于持续集成的软件包交付方法及装置 |
CN107608710A (zh) * | 2017-08-31 | 2018-01-19 | 华为技术有限公司 | 基于Jenkins工具的软件项目构建任务配置方法及装置 |
US10157195B1 (en) * | 2007-11-29 | 2018-12-18 | Bdna Corporation | External system integration into automated attribute discovery |
CN109117139A (zh) * | 2018-07-05 | 2019-01-01 | 珠海市魅族科技有限公司 | 一种软件构建方法及装置、服务器和可读存储介质 |
-
2019
- 2019-06-17 CN CN201910519306.0A patent/CN110286880B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10157195B1 (en) * | 2007-11-29 | 2018-12-18 | Bdna Corporation | External system integration into automated attribute discovery |
US20130074038A1 (en) * | 2011-09-15 | 2013-03-21 | Sonatype, Inc. | Method and system for evaluating a software artifact based on issue tracking and source control information |
CN102968298A (zh) * | 2012-10-31 | 2013-03-13 | 山东浪潮齐鲁软件产业股份有限公司 | 一种软件产品构建方法 |
CN105404584A (zh) * | 2015-11-25 | 2016-03-16 | 广州博冠信息科技有限公司 | Lpc静态代码检查方法、装置和系统 |
CN105404519A (zh) * | 2015-12-07 | 2016-03-16 | 青岛海信电器股份有限公司 | 一种版本控制方法、代码测试方法及系统 |
CN106897223A (zh) * | 2017-02-24 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种基于持续集成的软件包交付方法及装置 |
CN107608710A (zh) * | 2017-08-31 | 2018-01-19 | 华为技术有限公司 | 基于Jenkins工具的软件项目构建任务配置方法及装置 |
CN109117139A (zh) * | 2018-07-05 | 2019-01-01 | 珠海市魅族科技有限公司 | 一种软件构建方法及装置、服务器和可读存储介质 |
Non-Patent Citations (3)
Title |
---|
SSHOOTER: ""使用Github更新仓库"", 《HTTPS://SEGMENTFAULT.COM/A/1190000017892958》 * |
YAO WENJIE: ""travis-github-chrome-extension"", 《HTTP://GITHUB.COM/YAOWENJIE/TRAVIS-GITHUB-CHROME-EXTENSION》 * |
窦文生等: ""基于状态方面的Web服务动态替换"", 《计算机科学》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112698866A (zh) * | 2021-01-06 | 2021-04-23 | 中国科学院软件研究所 | 一种基于Git的代码行生命周期追溯方法及电子装置 |
CN112698866B (zh) * | 2021-01-06 | 2022-06-17 | 中国科学院软件研究所 | 一种基于Git的代码行生命周期追溯方法及电子装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110286880B (zh) | 2020-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1729477B (zh) | 解析系统和该系统中的解析方法、以及收集用于解析的调查结果的系统 | |
US6078890A (en) | Method and system for automated health care rate renewal and quality assessment | |
CN100428242C (zh) | 数据库调整方法和系统 | |
CN1924907B (zh) | 网络资源自动化管理系统及方法 | |
CN105359102A (zh) | 先进的客户支持服务-先进的支持云门户 | |
DE10227595A1 (de) | System und Verfahren zur automatischen Parametersammlung und Problemlösungserzeugung für Computerspeichervorrichtungen | |
CN105324756A (zh) | 云服务性能调优和基准测试 | |
CN103631699A (zh) | 日志管理系统及日志监控、获取和查询方法 | |
CN111445121A (zh) | 风险评估方法和装置、存储介质及电子装置 | |
CN107273281A (zh) | 基于代码变更的服务化接口测试方法、系统 | |
US20160018972A1 (en) | System And Method For Self-Optimizing A User Interface To Support The Execution Of A Business Process | |
CN111782635B (zh) | 数据处理方法和装置、存储介质和电子装置 | |
CN110286880A (zh) | 一种面向GitHub与Travis CI的完整持续集成数据收集方法 | |
KR101686791B1 (ko) | 각종 콜 센터 voc 음성 빅 데이터를 이용한 고객 crm 플랫폼 시스템 | |
US20110087614A1 (en) | System for representing an organization | |
CN110113428B (zh) | 一种wifi产品在生产线上数据采集分析系统及方法 | |
CN111639807A (zh) | 模型训练的方法、时长预测的方法、系统、设备及介质 | |
CN110781248A (zh) | 一种多源异构数据采集方法及装置 | |
KR101640870B1 (ko) | 업무이력 로그 관리 시스템 및 방법 | |
CN110032587A (zh) | 数据汇总方法、装置、计算机设备和存储介质 | |
Elsaid et al. | Automatic framework for requirement analysis phase | |
US20180260754A1 (en) | Systems and methods for managing resources in an information technology (it) infrastructure | |
JP2021189780A (ja) | シナリオ検索装置、シナリオ検索システム、シナリオ検索方法、及びプログラム | |
CN108989074A (zh) | 程序升级方法和程序升级装置 | |
CN102763096A (zh) | 医用图像处理系统以及医用图像处理服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |