# CICD **Repository Path**: BentoMan/cicd ## Basic Information - **Project Name**: CICD - **Description**: CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这篇文章介绍了CICD具体需要用到哪些工具进行搭建以及这些工具的具体作用。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-25 - **Last Updated**: 2021-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CICD ### 介绍 **CI : Continuous Integration 持续集成** - 持续集成意味着开发人员可以自动地把他们更新的代码进行构建、测试、并且合并到共享代码存储桶中。 - 现代应用开发的目标是让多位开发人员同时处理同一应用的不同功能,每位开发人员一般在Github上面有不同的分支,上线的时候会把不同的分支集中在一起。 - 但在集中过程中,不同开发人员使用不同的IDE,独立工作的开发人员对应用进行更改,可能也会与其他开发人员同时进行的更改发生冲突,从而会让我们的工作变得繁琐。 - 持续集成可以帮助开发人员频繁地将代码合并到共享分支或者主干中,一旦开发人员对应用所做的更改被合并,系统就会通过自动构建自动化测试来验证这些更改,确保更改没有对应用造成破坏。 **CD : Continuous Delivery 持续交付** 持续交互用于保证了团队可以在短时间内将软件部署到生产环境中,确保我们的软件能在任何时候可靠地进行发布,但很多时候,发布软件的操作是手动进行的。 **CD : Continuous Deployment 持续部署** 持续部署可以将我们的软件自动化地部署到生产环境中。 ### 为什么需要CICD? **1. 软件交付** 手动构建和部署软件流程复杂,CICD可以使流程自动化,让开发可以更频繁地发布较小的变更到生产环境。 **2. 资源释放** 将可重复和可预测的任务移交给自动化,可以让开发人员专注于开发。 **3. 可见度** “错误在哪里发生? 什么原因造成? 每个环境部署了什么? 是否可以回滚?” CICD中每个测试和部署的过程是透明的,可以迅速找到解决问题的最佳方案并可以及时回滚。 **4. 标准化** 手动操作会导致错误发生并且难以解决,导致开发、测试、运维工程师互相推卸责任。 持续集成可以自动完成软件交付的标准化构建和测试,手动任务更少,代码质量更高,流程更标准。 ### Jenkins [Jenkins®](https://www.jenkins.io/)是一款开源自动化服务器,可帮助团队通过使其自动化来加速软件开发过程。 Jenkins在整个生命周期中管理和控制软件交付流程,包括构建,文档,测试,打包,阶段,部署,静态代码分析等等。 ### Nexus - Nexus全称Sonatype Nexus,是一种特殊的远程仓库,它是架在局域网内的仓库服务。 - Maven访问远程仓库下载jar包是需要外网支持的,在不提供外网或者网速很慢的情况下,项目构建就会非常困难,所以很有必要在局域网内搭建Nexus私服。 - Nexus私服代理广域网上的远程仓库,供局域网内的Maven用户使用。 - 当Maven需要下载构件的时候,它从Nexus请求,如果Nexus上不存在该构件,则从外部的远程仓库上下载,缓存到nexus上之后再为Maven的下载提供服务。 - 除此之外,我们还可以把一些无法从外部远程仓库下载到的构件上传到私服,实现共享的目的。 ### Jazz - Jazz 平台是一个应用于软件生命周期的可扩展,可伸)团队协同平台,通过它可以把很多软件生命周期中的任务无缝地集成起来。 - 我们可以把在一个团队中完成不同的软件开发任务比喻成在一个乐队中演奏不同的乐器,每一个演奏者不仅要着力于演奏好自己的乐句,同时还要和乐队整体保持在音调,节奏方面的一致性。乐手之间必须要学会如何配合,如何进行必要的沟通以保证整个乐队的协调一致。 - 同样的,在软件开发流程中,开发人员不仅要保证高质量的完成自己的工作,同时也要协调自己和其他开发人员的工作,以保证和整个项目协调一致。现有的很多软件开发工具都非常有助于提高开发人员个人的生产效率,而 Jazz 在提高个人生产效率的基础上,使整个团队的生产效率得以提高。 - Jazz 平台主要的工作是提供一些规则和机制,按照这些实现软件生命周期中各个的模块无缝集成。上述规则和机制被封装在定义好的API中。 ### CICD的简单应用流程图 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0127/101902_3f69f95a_7878388.jpeg "CICD FLOW (2).jpg")