CI/CD持续集成/持续部署 敏捷开发
敏捷软件开发是一种应对快速变化需求的新型软件开发方法,强调程序员团队与业务专家的紧密协作、频繁交付新版本、紧凑的团队组织和适应需求变化的能力。持续集成(CI)和持续部署(CD)通过自动化构建、测试和部署,加快软件交付速度。持续交付(Continuous Delivery)则更注重快速、频繁地交付高质量产品。Jenkins作为持续集成引擎,支持自动构建、测试和部署,同时提供RSS、邮件通知等功能。版本控制工具如Jenkins、Git、GitHub等,帮助团队高效管理代码和项目。敏捷开发的核心在于协作、自动化和快速迭代,通过这些实践提升开发效率和产品质量。
敏捷软件开发(英语:Agile software development),又称敏捷开发,自20世纪90年代以来逐渐引起广泛关注,作为一种应对快速变化需求的软件开发方法。由于其具体名称、理念、过程和术语都不尽相同,相对于"非敏捷"方法,更强调程序员团队与业务专家之间的紧密协作、面对面沟通(认为这种面对面的沟通比书面文档更有效)、频繁交付新的软件版本、具有紧凑而自我组织型的团队结构、能够很好地适应需求变化的代码编写方式,以及更注重软件开发过程中人的作用。
1,CI/CD持续集成/持续部署
持续集成(Continuous Integration)是一种软件开发实践,开发团队成员定期集成工作成果,每天至少有一次集成。每次集成都伴随着自动化的构建流程,包括编译、发布以及自动化测试,从而能够及时发现集成中的问题。
持续集成/部署(CD)是一种通过自动化构建、测试和部署循环快速交付高质量产品的实践。某种程度上反映了开发团队工程化的水平。虽然快速运转的互联网公司人力成本高于机器,但投资机器优化开发流程化反而提高了人的效率,从而最大化了engineering productivity。
持续交付(CD,英语:Continuous Delivery)是一种软件工程手法,通过在短周期内实现产品的持续交付,确保软件能够随时发布,保持稳定运行。其核心目标是加快软件开发的速度,提升交付频率。这种方式不仅减少了软件开发的成本与时间,还显著降低了潜在风险。
与 DevOps的关系
持续交付与DevOps含义相近,容易被混淆。但二者并非同一概念。DevOps的范畴更为广泛,其核心在于文化转变,尤其是软件交付过程中涉及的多个团队协作(如开发、运维、QA、管理层等),并致力于将交付流程自动化。另一方面,持续交付是一种将各类流程集中并加快执行的自动化交付方式。因此,DevOps可以被视为持续交付的支撑,持续交付直接推动DevOps的发展。
与持续部署的关系
持续交付与持续部署常被混淆使用,但两者有本质区别。持续部署的特性是所有变更自动推送到生产环境,而持续交付则允许所有变更在生产环境中部署,但出于业务考量,有时选择不进行部署。要实现持续部署,必须先确保持续交付机制的完善。
1.1、enkins是什么?
Jenkins是一个可扩展的持续集成引擎。
主要用用途:
持续、自动的构建/测试软件项目。
监控一些定时执行的任务。、
特点:
易于安装,只要把jenkins.war部署到servlet容器
易于配置-所有配置都通过其提供的web界面实现。
集成RSS/E-mail通过RSS发布构建结果或当构件完成是通过e-mail通知。
生成JUnit/TestNG测试报告。
分布式构建支持Jenkins能够让多台计算机一起构建/测试。
构建过程中的文件识别功能,Jenkins能够追踪那次构建生成哪些Java包,并识别使用了哪个版本的jar文件。
插入支持:支持扩展插件,可以开发适合自己团队的使用的工具。
Jenkins的主要任务是实时监控软件开发流程,并迅速呈现问题。其优势在于减轻开发人员的工作负担,同时显著提升开发效率。
2、项目版本迭代控制 :、
现有的版本控制工具,如 Github、GitLab、SVN、CVS 等主流工具..
基于Jenkins实现的自动化构建与测试方案,同时采用商业级工具BAMBOO进行协作集成。针对付费用户,该方案提供高级功能;而对于免费用户,则推荐采用Jenkins作为基础工具。
交付:以Docker镜像形式进行交付,提交至镜像仓库;
2.1 SVN服务器:
Subversion是一款版本控制系统,相较于RCS和CVS,它采用了基于分支管理的系统结构,其主要设计目标是取代CVS。目前,许多在线免费版本控制服务都采用了Subversion作为其后端技术。
Subversion版本库可通过网络访问,使用户在不同电脑间进行操作。从某种程度上来说,允许用户在各自空间中管理同一组数据有助于团队协作。因为不再是线性开发,开发进度会加快。此外,由于所有工作均经过版本化管理,因此无需担心因错误修改影响软件质量,只需撤销错误修改即可。某些版本控制系统兼具软件配置管理功能,专为管理源代码库设计,具有编程语言支持等功能。然而,Subversion并非此类系统,它是一个通用系统,可管理任何形式的文件集。
2.2 CVS服务器:
Concurrent Versions System(CVS)是一种基于GNU的软件包,主要用于在多人协作开发环境中管理源码。Concurrent具有并发、协作和一致等多种特性。实际上,CVS不仅用于程序设计,还可以管理任意文档的开发与使用,例如共享文件的编辑与协作。CVS支持管理文本文件和二进制文件等多种类型。CVS采用Copy-Modify-Merge(拷贝、修改、合并)机制,支持对文件的并行编辑与协作。它通过将源文件存储与用户的工作空间分开管理,实现了并行操作和协作。这一特点使得CVS成为多个用户在不同地点同时处理数据文件(包括程序源代码)的理想选择。
主要的免费软件项目均以CVS为中心,整合各程序员的改进和修改。这些项目包括GNOME、KDE、THE GIMP和Wine等。
2.3 GIt/github:
GIT (分布式版本控制系统)
Git是一款功能强大的免费开源工具,广泛应用于敏捷开发流程,支持处理各种规模的项目。Git的发音为/gɪt/。
Git 是一种开源的分布式版本控制系统,能够高效地处理从小型到大型项目的版本管理。Git 由林斯·托瓦尔德为了帮助管理Linux内核开发而开发。在BitKeeper之前,托瓦尔德决定开发一个更灵活的开源版本控制系统。尽管Git最初是为Linux内核开发设计的,但如今它已在众多自由软件项目中得到广泛应用。例如,许多Freedesktop项目已迁移到Git上。
gitHub是一个基于开源及私有软件项目的版本控制系统平台,其采用唯一的git版本控制格式进行托管,因此得名gitHub。
gitHub是一个基于开源及私有软件项目的版本控制系统平台,其采用唯一的git版本控制格式进行托管,因此得名gitHub。
GitHub于2008年4月10日正式上线,全面提供了代码托管服务和Web界面管理功能。除了代码托管和Web界面功能以外,还推出了订阅服务、讨论区、文本渲染、在线编辑器、协作图谱、代码片段分享等功能。目前,注册用户数量已经超过350万,托管版本数量也非常庞大,涵盖了如Ruby on Rails、jQuery、Python等知名开源项目。
