DevOps软件开发周期及常用软件

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.DevOps概述

1.什么是DevOps

DevOps即Devlopment和Operations运维的缩写,但实际工作中也是需要Quality Assurance(质量保障,QA)来协同工作。

DevOps的维基百科定义是这样的:
	- 是一组过程,方法与系统的统称,用于促进开发,技术运营和质量保障(QA)部门之间的沟通,协作与整合;
	- 是针对开发人员,运维人员和测试人员的一种工作理念,是软件在应用开发,代码部署和质量测试等整条生命周期中协作和沟通的最佳实践;
	- 强调整个组织的所有相关部门的紧密合作以及交付和基础设施变更的自动化,从而实现持续集成,持续部署和持续交付的目标;

2.为什么要DevOps

传统的模式是开发人员只关心开发程序,追求功能的变化和实现。

运维只负责基础环境管理和代码部署及监控等,更看重应用的稳定运行。

双方缺少一个共同的目标。

DevOps强调团队协作,相互协助,持续发展,实现团队作战,即无论是开发,运维还是测试,都为了最终的代码发布,持续部署和业务稳定而辅助各自的努力,从而实现产品设计,开发,测试和部署的良性循环,实现憨批的最终交付。 

想要将DevOps真正落地,首先第一点,是思维转变,也就是"洗脑"。不仅是运维的要洗,开发也要洗。员工要求。领导更要洗。

DevOps并不是仅仅是组织架构变革,更是企业文化和思想观念的变革。如果不能改变观念,即使将员工放在一起,也不会产生火花。

除了洗脑之外,就是根据DevOps思想重新梳理全流程的规范和标准。

在DevOps的流程下,运维人员会在项目期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而指定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议。

DevOps的实施,促进开发和运维人员的沟通,增进彼此的理(gan)解(qing)。

二.软件开发生命周期(Software Development Life Cycle,SDLC)

1.软件开发生命周期(Software Development Life Cycle,SDLC)概述

软件开发生命周期(Software Development Life Cycle,SDLC)是指开发软件的过程中所经过的一系列阶段,从需求分析到系统维护,包括计划、设计、编码、测试、部署和维护等阶段。

    - 阶段1: 计划和需求分析(Planning and Requirement Analysis)
        每个软件开发生命周期模型开始都从分析开始,过程的利益相关者讨论对最终产品的要求。此阶段的目标是系统要求的详细邓毅。
        此外,还需要确保所有流程参与者都清楚地了解任务以及每个需求将如何实施。
        通常,讨论涉及质量保证专家,如果有必要,他们甚至可以在开发阶段干预过程中的添加。


    - 阶段2: 设计项目架构(Project Architecture)
        在软件开发生命周期的第二阶段,开发人员实际上正在设计架构。所有利益相关者(包括客户)都会讨论此阶段可能出现的所有不同技术问题。
        此外,还定义了项目中使用的技术,团队负载,限制,时间范围和预算。最合适的项目决策是根据定义的要求做出的。


    - 阶段三: 开发和编程(Development and Coding)
        在批准要求后,该过程进入下一个阶段,实际开发。程序员从这里开始写源代码,同时牢记先定义的需求。
        系统管理员调整软件环境,前段程序员开发程序用户界面以及与服务器交互的逻辑。
        编程本身一般会有四个阶段: 算法开发,源代码编写,编译,测试和调试。

    - 阶段四: 测试(Testing)
        测试阶段包括调试过程,开发过程中遗漏的所有代码缺陷都会在此检测到,记录下来并传回给开发人员进行修复。
        重复测试过程,直到删除所有关键问题并且软件工程流稳定。

    - 阶段五: 部署(Deployment)
        当程序最终确定并且没有关键问题是,是时候为最终用户启动它了,新程序版本发布后,技术支持团队加入。

    - 阶段六: 维护(maintenance)
        提供用户反馈,在利用期间咨询和支持用户。
        此外,该阶段还包括所选组件的更新,以确保软件是最新的,并且不会受到安全漏洞的影响。
	
	

SDLC旨在确保软件项目在质量、进度和成本等方面的成功,同时也有助于团队成员之间更好地协作和管理项目。

从第一个也是最古老的"瀑布式"SDLC模型演变而言,其种类不断扩大。比较常见的SDLC模型如下:
	- Waterfull Model(瀑布模型)
	- Iterative Model(迭代模型)
	- Spiral Model(螺旋模型)
	- V-Shape Model(V型模型)
	- Agile Model(敏捷模型)

2 Waterfull Model(瀑布模型)

Waterfull Model(瀑布模型)概述:
	是早期实现的开发模型,是一个级联SDLC模型,期中开发过程看起来像制造业的流水线,一步一步地进行分析,预测,实现,测试,实时和支持阶段。
	该SDLC模型包括完全逐步执行每个阶段。该过程严格记录并预定义,具有该软件开发生命周期模型的每个阶段所期望的功能。
	

Waterfull Model(瀑布模型)特征:
    - 优点:
		- 简单易用和理解;
		- 当前一阶段完成后,只需关注后续阶段;
		- 为项目提供了按阶段划分的检测节点;
		
    - 缺点:
    	- 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
    	- 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成功,从而增加了开发风险;
    	- 不适应用户需求的变化;
    	
这种模型和我们生活中买房的阶段很相似,比如用户买期房,到最后用户验房都是按阶段完成的,很显然,这种模式不太适合互联网经常变化需求的常见。

3 Agile Development(敏捷开发)

敏捷开发的核心是迭代开发(Iterative Development)与增量开发(IncrementDevelopment)。
    - 迭代开发(Iterative Development):
        对于大型软件项目,传统的开发方式是采用一个大周期(比如一年或数年)进行开发,整个过程就是一次"大开发"。
        迭代开发的方式则不一样,它将开发过程拆分成多个小周期。
        即一次"大开发"变成多次"小开发",每次小开发都是同样的流程,所以看上去就好像重复在做相同的步骤。
        举个例子: 
            某米公司生产收集,第一次生产某米1代(比较简陋),逐年在生产某米2代,目前已经到某米1x代。

    - 增量开发(IncrementDevelopment):
        软件的每个版本,都会新增一个开源被用户感知到的完整功能,也就是说,按照新功能来划分迭代。
        举个例子: 
            房冠地产公司开发一个小区。如果采用增量开发的模式,该公司第一个迭代就是交付一期楼盘,第二个迭代交付二期楼盘,...
            每个迭代都是完成一栋完整的楼盘。而不是第一个接待挖好所有楼的地基,第二个迭代建好每栋楼的骨架,第三个迭代架设屋顶,...
		
虽然敏捷开发将软件开发分成多个迭代,但是也要求,每次迭代都是一个完整的软件开发周期,必须按照软件工程的方法论,进行正规的流程管理。

敏捷开发大幅度提高了开发团队的工作效率,让版本的更新速度变得更快。

很多人可能觉得,"更新版本的速度快了,风险不就是更大了吗?"其实,事实并非如此。

敏捷开发可以帮助更快的发现问题,产品被更快地交付到用户手中,团队可以更快得到用户的反馈,从而进行更快的响应。

而且,DevOps小步快跑的形式带来的版本变化是比较小的,风险会更小。即时出现问题,修复起来也相对容易一些。


敏捷开发特征:
    - 优点:
    	- 尽量交付,加快资金回笼;
    	- 降级风险,及时了解市场需求;
    	- 提高效率,阶段性功能拆分及快速质量反馈;
    	
    - 缺点: 
    	- 代码变更,部署频繁

三.DevOps相关的软件

在思维和流程改变的同时,想要充分落地DevOps,当然离不开软件和平台的支持,目前DevOps的软件很多了。

1.项目管理相关软件

Microsoft Project:
	 是微软公司推出的项目管理软件,提供了全面的项目管理功能,包括任务分配、资源调度、进度跟踪、成本预算等。
	它支持多种项目视图(如甘特图、任务板等),便于团队成员直观地了解项目状态。

Jira:
	是 Atlassian 提供的一个敏捷项目管理工具,特别适用于软件开发和IT项目。
	它提供了问题追踪、工作流管理、版本控制集成等功能,支持敏捷开发方法(如Scrum、Kanban等)。

禅道:
	禅道是一款国产开源的项目管理软件,由禅道软件(青岛)有限公司在2010年创办。
	
Trello:
	是一个简单易用的项目管理工具,以卡片和面板的形式组织任务和信息。
	它适合小型团队和个人项目,可以快速地创建任务、分配责任、设置截止日期,并跟踪进度。


Asana:
	是一个功能强大的项目管理软件,提供了任务管理、项目跟踪、团队协作等功能。
	它支持多种项目视图和自定义工作流,便于团队成员根据自己的需求进行工作。

Basecamp:
	是一个全面的项目管理工具,提供了任务管理、文件共享、日程安排、沟通协作等功能。
	它适用于各种类型和规模的项目,可以方便地组织团队成员和相关信息。

Smartsheet: 
	是一个在线表格和项目管理工具,结合了电子表格的灵活性和项目管理的功能性。
	它支持多人协作、任务分配、进度跟踪等功能,并提供了丰富的模板和报告选项。

Wrike: 
	是一个团队协作和项目管理软件,提供了任务管理、项目跟踪、文件共享等功能。
	它支持实时协作和动态更新,可以帮助团队成员更好地协同工作。

Monday.com:
	是一个直观易用的项目管理工具,以卡片和面板的形式展示任务和项目信息。
	它提供了多种自定义选项和集成功能,可以满足不同团队和项目的需求。


选择合适的项目管理软件时,需要考虑团队的需求、项目的规模、预算以及团队成员的技术水平等因素。不同的软件可能具有不同的功能和特点,因此建议在选择前进行充分的评估和试用。

2.代码托管相关软件

GitHub:
	是最大的代码托管平台之一,被广泛用于开源和私有项目的版本控制。
	提供丰富的功能,如代码审查、问题追踪、集成持续部署和集成等。

GitLab:
	是一个完整的DevOps平台,提供版本控制、CI/CD、代码审查、问题追踪等功能。
	可以部署在本地服务器或云环境中,适用于需要高度定制化和安全性的企业。


Bitbucket:
	是 Atlassian 提供的一个代码托管平台,支持 Git 和 Mercurial 版本控制。
	提供私有仓库免费服务,适合小型团队和个人项目。集成 Jira 和其他 Atlassian 工具,便于项目管理。


Gitea:
	是一个开源的 Git 代码托管平台,类似于 GitHub 和 GitLab。
	适合想要自主搭建代码托管服务的企业或个人。

SourceForge:
	是一个历史悠久的开源软件托管平台,提供版本控制、项目管理和发布服务。
	虽然不如 GitHub 和 GitLab 流行,但在某些开源社区中仍有一定影响力。

Microsoft:
	 提供的 DevOps 平台,集成了版本控制、CI/CD、测试、项目管理等功能。
	与 Visual Studio 紧密集成,适合使用 Microsoft 技术的团队。

Phabricator:
	 是一个开源的软件开发平台,提供代码托管、问题追踪、代码审查等功能。
	适用于需要高度定制化和灵活性的团队。

Amazon Web Services (AWS) :
	提供的代码托管服务,与 AWS 的其他服务紧密集成。适合已经在使用 AWS 的企业或项目。
	
选择合适的代码托管软件时,需要考虑团队的需求、项目的规模、安全性要求以及预算等因素。开源解决方案(如 GitLab、Gitea、Phabricator)通常提供更高的灵活性和定制性,但需要自己负责部署和维护。而商业解决方案(如 GitHub、GitLab SaaS、Bitbucket、Azure DevOps)则提供更易用的界面和更全面的服务,但可能需要支付一定的费用。

3.持续交付相关软件

- 极狐GitLab
	极狐GitLab是一个全面的DevOps平台,集成了代码管理、CI/CD、监控和安保扫描等功能。
	它提供了从代码提交到部署的全自动流程,支持多种编程语言和平台,适用于不同规模的开发团队。

- Jenkins:
	Jenkins是一款开源的自动化服务器,广泛用于实现持续集成和持续交付。Jenkins的配置和使用相对复杂,但其灵活性和可定制性极高。
	它支持各种插件,可以与不同的工具和服务集成,适合需要高度定制化的项目。

- SonarQube:
	SonarQube是一个开源的代码质量管理平台,主要用于源代码的质量控制和安全性分析。
	它通过持续集成(CI)的方式,对代码进行静态分析,帮助开发团队识别并解决代码中的潜在问题,包括代码异味、漏洞、重复代码等,从而显著提升软件的整体质量。

- CircleCI:
	CircleCI是一款基于云的持续集成和持续交付平台,支持快速、可靠的构建、测试和部署。
	它的并行测试功能可以显著缩短测试时间,提高开发效率。CircleCI还支持多种集成选项,适用于各种规模的开发团队。

- Travis CI:
	Travis CI是一款基于云的CI/CD工具,专为开源项目设计。
	它与GitHub紧密集成,用户只需在GitHub上配置即可使用。

- Bamboo:
	Bamboo是Atlassian提供的一款CI/CD工具,适用于中小型项目。
	它提供了丰富的功能,包括自动化构建、测试和部署。

- TeamCity:
	TeamCity是JetBrains提供的一款CI/CD工具,适用于需要高度定制化流程的项目。
	它提供了强大的构建和部署功能,支持多种编程语言和平台。

- Azure DevOps:
	Azure DevOps是微软提供的一套完整的开发工具,包括版本控制、工作项跟踪、构建和发布等功能。它适用于需要高度集成的开发环境。

- GitHub Actions:
	GitHub Actions是GitHub提供的一套自动化工具,支持从代码提交到部署的全过程。
	它适用于GitHub上的项目,提供了丰富的集成选项。

- Bitbucket Pipelines:
	Bitbucket Pipelines是Atlassian提供的CI/CD服务,适用于Bitbucket上的项目。
	它支持自动化构建、测试和部署,适用于中小型项目。

- CodeShip:
	CodeShip是一个云基础的CI/CD服务,适用于需要快速部署的项目。它提供了简单的配置选项和强大的集成功能。

这些工具各有特点,适用于不同的项目需求和开发环境。选择合适的CI软件可以根据项目的具体需求、团队规模以及预算等因素来决定。

4.运维平台相关软件

腾讯蓝鲸,宝塔,Spug等。
posted @ 2019-01-12 14:12  尹正杰  阅读(722)  评论(0编辑  收藏  举报