5月22日是什么星座| 拔罐有什么作用和功效| 真丝用什么洗| 没有什么| 喜欢穿黑色衣服的女人是什么性格| 促甲状腺高会导致什么| 为什么运动完会恶心头晕想吐| 掉马是什么意思| 什么是匝道图片| 母亲节送婆婆什么礼物| 核心抗体阳性是什么意思| 日语莫西莫西什么意思| 旭五行属什么| 神经衰弱吃什么药好| 渴望是什么意思| ct和拍片有什么区别| 吃什么可以| 砼为什么念hun| 1964年是什么生肖| 肠澼是什么意思| 午睡后头疼是什么原因| 舌头短是什么原因| 梦到怀孕生孩子是什么意思| 内分泌失调吃什么药| 客观原因是什么意思| 七月属什么生肖| 吃什么养肾| 人乳头瘤病毒16型阳性是什么意思| 火字旁跟什么有关| 终其一生下一句是什么| dhc是什么牌子| 候车是什么意思| 八月十五什么星座| 青色是什么样的颜色| 盆腔炎是什么原因引起的| 先天性一个肾对人有什么影响| 农历7月25日是什么星座| 梦特娇属于什么档次| 为什么会长丝状疣| 狗狗湿疹用什么药膏最有效| 甘油三酯高是什么意思| 价值连城是什么意思| 淋巴细胞是什么意思| 女生被口是什么感觉| 正方形体积公式是什么| 学英语先从什么学起| 帝王蟹什么季节吃最好| 纯碱是什么| 猴日冲虎是什么意思| 小孩嗓子哑了吃什么药| 主胰管不扩张是什么意思| 食少便溏是什么意思| 姓郑的男孩取什么名字好| 窥什么意思| 大肠杆菌是什么| 甲状腺结节伴钙化什么意思| 乙酉日五行属什么| 脚踝发黑是什么原因| 什么最赚钱| 女人梦到地震预示什么| 三月份是什么季节| 四月初八是什么节日| 皮下出血小红点是什么原因造成的| 初级会计什么时候报名| 玫瑰疹是什么病| 什么的眉毛| yankees是什么牌子| 卧室放什么花最好健康| 什么药止汗效果最好| 宫颈息肉是什么原因引起的| 叶黄素是什么东西| rapper什么意思| 古曼童是什么| 缺钙吃什么食物| 肌肉萎缩看什么科| 一个金字旁一个本念什么| mrsa是什么细菌| 玟是什么意思| 眉头长痘痘什么原因| 男性性功能减退吃什么药| 挚肘是什么意思| 煤油对人体有什么危害| 望远镜10x50什么意思| 眼睛疼吃什么药| 考上公务员意味着什么| 心意是什么意思| 苏联是什么国家| 脾胃不好吃什么| 1977属什么生肖| 埋单是什么意思| 卸磨杀驴什么意思| 为什么星星会眨眼睛| 玖姿女装属于什么档次| 蜜蜡脱毛有什么危害吗| 一生无虞是什么意思| 血红蛋白浓度偏低是什么原因| 车前草治什么病| 得罪是什么意思| 经常头痛吃什么药效果好| 挪揄是什么意思| 什么属相不能戴貔貅| 指甲表面凹凸不平是什么原因| 圣是什么生肖| 孙字五行属什么| 安保是什么工作| 腰酸胀是什么原因| 张衡发明了什么| 中暑了吃什么好| 心五行属性是什么| 记忆是什么意思| 梦见自己死了是什么预兆| 培育是什么意思| 肾结石吃什么比较好| 水稻什么时候播种| 什么是痔疮| 延字五行属什么| 低密度脂蛋白胆固醇偏低是什么意思| 3月5日是什么纪念日| 什么关系| cco是什么意思| 刺身什么意思| 胸部有硬块挂什么科| 闰月是什么意思| 天德是什么意思| 窦炎症是什么病| 什么叫占位病变| 方便是什么意思| 黄疸偏高有什么危害| 征求是什么意思| 吃什么排气最快| 镶牙用什么材料好| 陈赫什么星座| 梦见一个小男孩是什么意思| 身体缺钾是什么原因造成的| 皂苷是什么| 幽门螺旋杆菌感染吃什么药| 孕期便秘吃什么通便快| 没有料酒用什么去腥| 经血粉红色是什么原因| 周瑜为什么打黄盖| 肌酸激酶高吃什么药| 蓝莓泡酒有什么功效| 鬼剃头是因为什么原因引起的| 钾低是什么原因造成的| 右肺纤维灶是什么意思| 血压低吃什么中成药| 泡什么喝可以降血糖| 食道癌有什么症状| 71年什么时候退休| 商标r是什么意思| 五六点是什么时辰| 脚冷是什么原因| 奇异果和猕猴桃有什么区别| 做颈动脉彩超挂什么科| 银壶一般什么价位| 葡萄糖氯化钠注射作用是什么| 嗓子疼吃什么水果好得快| 眩晕症是什么引起的| 小孩老是打嗝是什么原因| 梦见自己流产了是什么征兆| 发烧头疼吃什么药| 零八年属什么| 貂蝉姓什么| 孕妇做无创是检查什么| 咽喉炎是什么原因引起的| 废品收入计入什么科目| 男人的精子对女人有什么好处| 沙金是什么| NG是什么| 胸部ct可以检查出什么| 什么东西能加不能减| 天麻长什么样子图片| 补脑吃什么最好| 消症是什么意思| 隔夜茶为什么不能喝| 六根清净是什么意思| 垂的第三笔是什么| 夏天吃什么最好| 高考都考什么| 痨病是什么病| 知了为什么叫| 什么是结膜炎| gda是什么血管| 脑梗塞吃什么食物好| bj什么意思| 小孩脱发是什么原因引起的| 蛇为什么会咬人| 用神是什么意思| 高碱性食物都有什么| 一步登天是什么生肖| 7月30号什么星座| 食用棕榈油是什么油| 倒春寒是什么意思| 谦虚的什么| 烫伤起泡用什么药膏| 码放是什么意思| 红豆薏仁水有什么功效| 逆来顺受什么意思| 脾功能亢进是什么意思| 口语化是什么意思| 吃什么长指甲最快| 早上起床口苦是什么原因| 手为什么会脱皮| 利水渗湿是什么意思| 唐伯虎是什么生肖| 小便有点刺痛是什么原因引起的| 烤鱼一般用什么鱼| 梦见蛇吃蛇是什么预兆| 长的像蛇的鱼是什么鱼| 脚肿吃什么消肿最快| 黑五是什么时候| 大便粗大是什么原因| o2o模式是什么意思| 新生儿出院回家有什么讲究| 皮肤为什么会痒| 乳房胀痛什么原因| 萎缩性胃炎吃什么药好| 枇杷不能和什么一起吃| 为什么做着做着就软了| 曼巴是什么意思| 卡其色裙子配什么颜色上衣好看| 经常腿麻是什么原因| 男人分手是什么感觉| 什么药止汗效果最好| 为什么突然得了荨麻疹| 梦见买鞋子是什么意思| 梦到水是什么意思| 眼压高吃什么药| 气胸吃什么药| 梦见穿新衣服是什么意思| 公粮是什么意思| 喝山楂水有什么好处| 声音沙哑是什么原因| 五指毛桃煲汤配什么| 温水煮青蛙什么意思| 女人严重口臭挂什么科| 什么是白肉| 猫的耳朵有什么作用| gg是什么意思| 家里为什么突然有床虱| 清歌是什么意思| 为什么会晕血| 属猪的幸运颜色是什么| 固本培元是什么意思| 本科生是什么意思| 舌头开裂是什么原因| 北京中秋节有什么活动| 紫皮大蒜和白皮大蒜有什么区别| 类风湿忌吃什么| chd医学上是什么意思| reald厅什么意思| 新生儿头发稀少是什么原因| 立夏吃什么食物| 八段锦什么时间练最好| 蛋白粉吃多了有什么危害| 掉头发是缺什么维生素| 停经闭经吃什么药调理| 王晶老婆叫什么名字| 韭黄是什么| 长期口臭要看什么科| 营养性贫血是什么意思| 什么是iga肾病| 白带有腥味是什么原因| 咳嗽白痰是什么原因| 百度

尿液有泡沫是什么原因

百度 凤凰网记者从现场了解到,在洛杉矶首发亮相之后,REDS项目会快速进入实际测试阶段,工程师和零部件供应商将从量产化的角度,不断改进产品的性能。

Continuous integration (CI) is the practice of integrating source code changes frequently and ensuring that the integrated codebase is in a workable state.

Sketch of flow diagram for continuous integration

Typically, developers merge changes to an integration branch, and an automated system builds and tests the software system.[1] Often, the automated process runs on each commit or runs on a schedule such as once a day.

Grady Booch first proposed the term CI in 1991,[2] although he did not advocate integrating multiple times a day, but later, CI came to include that aspect.[3]

History

edit

The earliest known work (1989) on continuous integration was the Infuse environment developed by G. E. Kaiser, D. E. Perry, and W. M. Schell.[4]

In 1994, Grady Booch used the phrase continuous integration in Object-Oriented Analysis and Design with Applications (2nd edition)[5] to explain how, when developing using micro processes, "internal releases represent a sort of continuous integration of the system, and exist to force closure of the micro process".

In 1997, Kent Beck and Ron Jeffries invented extreme programming (XP) while on the Chrysler Comprehensive Compensation System project, including continuous integration.[1][self-published source] Beck published about continuous integration in 1998, emphasising the importance of face-to-face communication over technological support.[6] In 1999, Beck elaborated more in his first full book on Extreme Programming.[7] CruiseControl, one of the first open-source CI tools,[8][self-published source] was released in 2001.

In 2010, Timothy Fitz published an article detailing how IMVU's engineering team had built and been using the first practical CD system. While his post was originally met with skepticism, it quickly caught on and found widespread adoption[9] as part of the lean software development methodology, also based on IMVU.

Practices

edit

The core activities of CI are developers co-locate code changes in a shared, integration area frequently and that the resulting integrated codebase is verified for correctness. The first part generally involves merging changes to a common version control branch. The second part generally involves automated processes including: building, testing and many other processes.

Typically, a server builds from the integration area frequently; i.e. after each commit or periodically like once a day. The server may perform quality control checks such as running unit tests[10] and collect software quality metrics via processes such as static analysis and performance testing.

edit

This section lists best practices from practitioners for other practices that enhance CI.

Build automation

edit

Build automation is a best practice.[11][12] Build automation tools automate building.

Proponents of CI recommend that a single command should have the capability of building the system.

Automation often includes automating the integration, which often includes deployment into a production-like environment. In many cases, the build script not only compiles binaries but also generates documentation, website pages, statistics and distribution media (such as Debian DEB, Red Hat RPM or Windows MSI files).

Atomic commits

edit

CI requires the version control system to support atomic commits; i.e., all of a developer's changes are handled as a single commit.

Committing changes

edit

When making a code change, a developer creates a branch that is a copy of the current codebase. As other changes are committed to the repository, this copy diverges from the latest version.

The longer development continues on a branch without merging to the integration branch, the greater the risk of multiple integration conflicts[13] and failures when the developer branch is eventually merged back. When developers submit code to the repository they must first update their code to reflect the changes in the repository since they took their copy. The more changes the repository contains, the more work developers must do before submitting their own changes.

Eventually, the repository may become so different from the developers' baselines that they enter what is sometimes referred to as "merge hell", or "integration hell",[14] where the time it takes to integrate exceeds the time it took to make their original changes.[15]

Testing locally

edit

Proponents of CI suggest that developers should use test-driven development and to ensure that all unit tests pass locally before committing to the integration branch so that one developer's work does not break another developer's copy.

Incomplete features can be disabled before committing, using feature toggles.

Continuous delivery and continuous deployment

edit

Continuous delivery ensures the software checked in on an integration branch is always in a state that can be deployed to users, and continuous deployment automates the deployment process.

Continuous delivery and continuous deployment are often performed in conjunction with CI and together form a CI/CD pipeline.

Version control

edit

Proponents of CI recommend storing all files and information needed for building in version control, (for git a repository); that the system should be buildable from a fresh checkout and not require additional dependencies.

Martin Fowler recommends that all developers commit to the same integration branch.[16]

Commit frequently

edit

Developers can reduce the effort of resolving conflicting changes by synchronizing changes with each other frequently; at least daily. Checking in a week's worth of work risks conflict both in likelihood of occurrence and complexity to resolve. Relatively small conflicts are significantly easier to resolve than larger ones. Integrating (committing) changes at least once a day is considered good practice, and more often better.[17]

Daily build

edit

Building daily, if not more often, is generally recommended.[citation needed]

Every commit should be built

edit

The system should build commits to the current working version to verify that they integrate correctly. A common practice is to use Automated Continuous Integration, although this may be done manually. Automated Continuous Integration employs a continuous integration server or daemon to monitor the revision control system for changes, then automatically run the build process.

Every bug-fix commit should come with a test case

edit

When fixing a bug, it is a good practice to push a test case that reproduces the bug. This avoids the fix to be reverted, and the bug to reappear, which is known as a regression.

Keep the build fast

edit

The build needs to complete rapidly so that if there is a problem with integration, it is quickly identified.

Test in a clone of the production environment

edit

Having a test environment can lead to failures in tested systems when they deploy in the production environment because the production environment may differ from the test environment in a significant way. However, building a replica of a production environment is cost-prohibitive. Instead, the test environment or a separate pre-production environment ("staging") should be built to be a scalable version of the production environment to alleviate costs while maintaining technology stack composition and nuances. Within these test environments, service virtualisation is commonly used to obtain on-demand access to dependencies (e.g., APIs, third-party applications, services, mainframes, etc.) that are beyond the team's control, still evolving, or too complex to configure in a virtual test lab.

Make it easy to get the latest deliverables

edit

Making builds readily available to stakeholders and testers can reduce the amount of rework necessary when rebuilding a feature that doesn't meet requirements. Additionally, early testing reduces the chances that defects survive until deployment. Finding errors earlier can reduce the amount of work necessary to resolve them.

All programmers should start the day by updating the project from the repository. That way, they will all stay up to date.

Everyone can see the results of the latest build

edit

It should be easy to find out whether the build breaks and, if so, who made the relevant change and what that change was.

Automate deployment

edit

Most CI systems allow the running of scripts after a build finishes. In most situations, it is possible to write a script to deploy the application to a live test server that everyone can look at. A further advance in this way of thinking is continuous deployment, which calls for the software to be deployed directly into production, often with additional automation to prevent defects or regressions.[18][19]

Benefits

edit

CI benefits include:

  • Facilitates detecting bugs earlier
  • Reduces effort to find cause of bugs; if a CI test fails then changes since last good build contain causing change; if build after each change then exactly one change is the cause[1]
  • Avoids the chaos of integrating many changes
  • When a test fails or a bug is found, reverting the codebase to a good state results in fewer lost changes
  • Frequent availability of a known-good build for testing, demo, and release
  • Frequent code commit encourages modular, less complex code[20]
  • Quick feedback on system-wide impact of code changes
  • Supports collection of software metrics such as code coverage, code complexity

Risks

edit

Risks of CI include:

  • Build system setup requires effort[21]
  • Writing and maintaining an automated test suite requires effort
  • Value added depends on the quality of tests[22]
  • High build latency (sitting in queue) limits value[22]
  • Implies that incomplete code should not be integrated which is counter to some developer's preferred practice[22]
  • Safety and mission-critical development assurance (e.g., DO-178C, ISO 26262) require documentation and review which may be difficult to achieve

Best practices for cloud systems

edit

The following practices can enhance productivity of pipelines, especially in systems hosted in the cloud: [23][24][25]

  • Number of Pipelines: Small teams can be more productive by having one repository and one pipeline. In contrast, larger organizations may have separate repositories and pipelines for each team or even separate repositories and pipelines for each service within a team.
  • Permissions: In the context of pipeline-related permissions, adhering to the principle of least privilege can be challenging due to the dynamic nature of architecture. Administrators may opt for more permissive permissions while implementing compensating security controls to minimize the blast radius.

See also

edit

References

edit
  1. ^ a b c Fowler, Martin (1 May 2006). "Continuous Integration". Retrieved 9 January 2014.
  2. ^ Booch, Grady (1991). Object Oriented Design: With Applications. Benjamin Cummings. p. 209. ISBN 9780805300918. Retrieved 18 August 2014.
  3. ^ Beck, K. (1999). "Embracing change with extreme programming". Computer. 32 (10): 70–77. doi:10.1109/2.796139. ISSN 0018-9162.
  4. ^ Kaiser, G. E.; Perry, D. E.; Schell, W. M. (1989). Infuse: fusing integration test management with change management. Proceedings of the Thirteenth Annual International Computer Software & Applications Conference. Orlando, Florida. pp. 552–558. CiteSeerX 10.1.1.101.3770. doi:10.1109/CMPSAC.1989.65147.
  5. ^ Booch, Grady (December 1998). Object-Oriented Analysis and Design with applications (PDF) (2nd ed.). Archived from the original (PDF) on 19 August 2019. Retrieved 2 December 2014.
  6. ^ Beck, Kent (28 March 1998). "Extreme Programming: A Humanistic Discipline of Software Development". Fundamental Approaches to Software Engineering: First International Conference. Vol. 1. Lisbon, Portugal: Springer. p. 4. ISBN 9783540643036.
  7. ^ Beck, Kent (1999). Extreme Programming Explained. Addison-Wesley Professional. p. 97. ISBN 978-0-201-61641-5.
  8. ^ "A Brief History of DevOps, Part III: Automated Testing and Continuous Integration". CircleCI. 1 February 2018. Retrieved 19 May 2018.
  9. ^ Sane, Parth (2021), "A Brief Survey of Current Software Engineering Practices in Continuous Integration and Automated Accessibility Testing", 2021 Sixth International Conference on Wireless Communications, Signal Processing and Networking (WiSPNET), pp. 130–134, arXiv:2103.00097, doi:10.1109/WiSPNET51692.2021.9419464, ISBN 978-1-6654-4086-8, S2CID 232076320
  10. ^ Radigan, Dan. "Continuous integration". Atlassian Agile Coach.
  11. ^ Brauneis, David (1 January 2010). "[OSLC] Possible new Working Group – Automation". open-services.net Community (Mailing list). Archived from the original on 1 September 2018. Retrieved 16 February 2010.
  12. ^ Taylor, Bradley. "Rails Deployment and Automation with ShadowPuppet and Capistrano". Rails machine (blog). Archived from the original on 2 December 2012. Retrieved 16 February 2010.
  13. ^ Duvall, Paul M. (2007). Continuous Integration. Improving Software Quality and Reducing Risk. Addison-Wesley. ISBN 978-0-321-33638-5.
  14. ^ Cunningham, Ward (5 August 2009). "Integration Hell". WikiWikiWeb. Retrieved 19 September 2009.
  15. ^ "What is Continuous Integration?". Amazon Web Services.
  16. ^ Fowler, Martin. "Practices". Continuous Integration (article). Retrieved 29 November 2015.
  17. ^ Paul M. Duvall; Steve Matyas; Andrew Glover (2007). Continuous Integration: Improving Software Quality and Reducing Risk. Addison-Wesley Professional. ISBN 978-0-321-33638-5.
  18. ^ Ries, Eric (30 March 2009). "Continuous deployment in 5 easy steps". Radar. O’Reilly. Retrieved 10 January 2013.
  19. ^ Fitz, Timothy (10 February 2009). "Continuous Deployment at IMVU: Doing the impossible fifty times a day". Wordpress. Retrieved 10 January 2013.
  20. ^ Junpeng, Jiang; Zhu, Can; Zhang, Xiaofang (July 2020). "An Empirical Study on the Impact of Code Contributor on Code Smell" (PDF). International Journal of Performability Engineering. 16 (7): 1067–1077. doi:10.23940/ijpe.20.07.p9.10671077. S2CID 222588815.
  21. ^ Laukkanen, Eero (2016). "Problems, causes and solutions when adopting continuous delivery—A systematic literature review". Information and Software Technology. 82: 55–79. doi:10.1016/j.infsof.2016.10.001.
  22. ^ a b c Debbiche, Adam. "Assessing challenges of continuous integration in the context of software requirements breakdown: a case study" (PDF).
  23. ^ Serverless Architectures on AWS. Manning. 29 March 2022. ISBN 978-1617295423.
  24. ^ Pipeline as Code Continuous Delivery with Jenkins, Kubernetes, and Terraform. Manning. 23 November 2021. ISBN 9781638350378.
  25. ^ Humble, Jez; Farley, David (27 July 2010). Continuous Delivery Reliable Software Releases Through Build, Test, and Deployment Automation. Pearson Education. ISBN 9780321670229.
edit
为什么叫梅雨季节 拔牙后注意什么 cashmere是什么面料 贫血是什么 拔牙后不能吃什么食物
尿路感染吃什么药比较好的快 什么情况下会宫外孕 西红柿和什么搭配最好 什么是管状腺瘤 男怕穿靴女怕戴帽什么意思
梅花是什么颜色的 什么是白肉 霉菌性阴道炎用什么栓剂 月经不调挂什么科 放疗起什么作用
冰点脱毛的原理是什么 ks是什么意思 脾大是什么病 女性尿频吃什么药 灌肠什么感觉
胎儿偏小吃什么补得快hcv8jop3ns0r.cn 走马观花的走是什么意思hcv7jop5ns5r.cn 湿气是什么原因造成的hcv9jop4ns2r.cn 什么时候做人流才是最佳时间hcv8jop9ns2r.cn 醋酸生育酚是什么东西hcv8jop8ns8r.cn
1994年属什么生肖hcv9jop0ns5r.cn 7月4号是什么星座hcv9jop7ns1r.cn 附骨疽是什么病zhongyiyatai.com 签注什么意思hcv8jop8ns3r.cn 别墅是什么意思hcv7jop5ns2r.cn
水母是什么hcv9jop2ns7r.cn 脑白质变性什么意思hcv9jop0ns3r.cn 梦见好多水果是什么预兆cl108k.com 鸡蛋散黄是什么原因hcv7jop6ns3r.cn 情调是什么意思hcv7jop5ns0r.cn
舌苔黄腻厚是什么原因travellingsim.com 科员是什么职务hcv7jop6ns6r.cn 打招呼是什么意思hcv9jop7ns5r.cn maxco是什么牌子hcv9jop0ns2r.cn 微量元素六项是什么检查hcv7jop5ns1r.cn
百度