PS:要转载请注明出处,本人版权所有。

PS: 这个只是基于《我自己》的理解,

如果和你的原则及想法相冲突,请谅解,勿喷。

前置说明

  本文作为本人csdn blog的主站的备份。(BlogID=090)

  本文发布于 2019-12-20 16:52:54,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=090)

环境说明

  无

前言


  软件开发,水很深。

  做了两年有余的攻城狮,做了代码开发,技术框架搭建,环境搭建,项目管理,用户沟通等工作,我从代码开发者的角度来看,我们的写的内容到用户实际使用往往中间有许多的内容的,作为开发者,千万别人为自己写的代码就是整个项目周期的全部,其实code部分只占很少的时间,从code后到交付给用户使用的中间部分才是非常大的一个时间占比。

软件开发思考


  在学校里面,当我们学习软件工程这门课时,教授的内容是比较传统的软件开发流程,它们大概是如下的流程:

  1. 获取到大致项目需求
  2. 需求评估
  3. 需求文档整理
  4. 概要设计(技术框架设计)
  5. 编码
  6. 测试
  7. 交付

  当交付给用户后,实际情况是不可能一次性交付成功的,都会涉及到相关的需求细化和变更,于是又要重复5-7的步骤。

  到了实际工作中后,会出现一种现象,项目交付的时间尽可能短,项目需求变更和交付时间也需要尽可能的短,于是就出现了传统按部就班的开发模式不能够完成相关的项目,于是出现了一些快速开发的方法,如敏捷开发。

  在实际过程中,敏捷开发只是加速开发迭代部分,如果没有控制好,就会出现开发速度加快了,但是测试,交付会出现问题,为啥会出现呢?其实很简单,就是都是独立串行的,这会导致从整体看,项目开发时间拖长。

  为了解决类似的问题,又提出了类似Devops的说法,就是大家都坐一起,相互依赖的做事,因为都是站在整体考虑的,所以可以对整个流程(开发、测试、交付)的情况进行协调,效率会比较好。

  为了把上述的问题处理好,我们必须要引入一些工具(VCS,CI,CD,CD)来帮助我们做事,否则是处理不好的这些事的,就会出现:要不效率低,能完成。要不效率高,就是容易出错。

版本管理系统(Version Control System)


  版本管理系统,这个不用介绍了,大家平常工作中都会用,常用的有svn和git,如果没有接触过,有兴趣的可以多去网上找找资料学习学习,它们可以提供代码管理、溯源等功能。

  版本管理系统除了本身的属性外,它自身带的一些特性可以用来做一些其他的事情,比如它的push事件可以用来触发一些其他的工作。

持续集成(Continuous Integration)


  持续集成其实对于开发者来说,是很简单的一件事情。就相当于你code完,然后手动编译,测试这样的一个流程。平常比如你用vs写了一个程序,然后你右键编译,然后f5运行测试,最后到相应的目录去打包发布程序。这种方式在软件规模比较小的时候,完全可以采用,流程可控的,当软件规模过大,而且需要持续维护修改时,这种方式会让人炸裂的。

  所以持续集成简单的归纳为通过一些工具来自动化编译,单元测试,并生成相关的报告。至于什么时候自动开始编译,这里就是上文说的VCS的相关事件来触发就行。

持续交付(Continuous Delivery)


  持续交付其实由相关QA质量保证团队来手动或者自动的方式,检测刚刚持续集成的程序版本,在模拟生产环境下,是否能够正常工作。

  这里强调的还是内部测试,只是相关测试更贴近于实际生产环境。注意这里没有部署到生产环境。对于很多公司来说,其实QA软件部门是等于没有的。

持续部署(Continuous Deployment)


  持续部署就是通过一些工具,自动化的把经过单元测试,QA测试后,打包,自动化部署到生产环境这么一个过程。

关于ci,cd,cd,vcs的说明


  其实就以上而言,你可以直接认为就是,使用工具,自动化从vcs拉取代码,自动化编译测试程序,(半)自动化QA保证,自动化部署程序到生产环境这么一个过程。这里借助了很多自动化工具,大大节约了程序多次迭代的时间。所以对于软件开发来说,哪怕是敏捷开发,devops等模式都可以很好的建立起来。

  但是不是说以上的就是最好的呢?因为在软件第一次发布的时候,如果借用以上的自动化流程,需要一个人或者团队来建立这个自动化逻辑,这是比较烦的一件事情,所以如果软件迭代次数少,规模不大,不要硬搬硬套上述整个流程,实在是不合适。但是里面的vcs,我还是希望每个项目都能够用起来,真的很不错。

Jenkins , Travis ,Github Action 等ci,cd工具说明


  这些工具是我用过的,世界上还有许多这样的工具,看个人喜好了。这里要对这些工具分一个类,按照他们的部署位置分一下,一种是需要自己搭建相关服务的,并完成cicd的事情,一种是自己提供相关配置文件(yml),由云端给你解析这个配置文件并完成相关功能。

  这里Jenkins是属于需要自己搭建服务的,需要自己定义相关的流程并完成cicd的事情。

  Travis,GitHub Action这种是输入云端的功能,基本上算是属于SaaS,你只需要提供遵循相关语法的配置文件,它们就会自动完成你定义的流程。

后记


  总结

  合适的事情,选择合适的工具。不是所有的情况都能够把上面的整套给怼到团队中去,但是整个软件开发的流程和内容还是值得我们大家思考和借鉴的。

  比如我们的团队就引入了git和jenkins就够了,能够做简单的版本管理和基本的软件集成测试。其他的手动介入性价比比较好。

  比如我自己封装的一些开源小功能,我引入git,travis, github action就已经足够了。

参考文献


打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)

PS: 请尊重原创,不喜勿喷。

PS: 要转载请注明出处,本人版权所有。

PS: 有问题请留言,看到后我会第一时间回复。

软件开发、持续集成(CI)、持续交付(CD)、持续部署(CD) 和 版本管理(Version Control) 的理解和思考的更多相关文章

  1. Gitlab+Gitlab-CI+Docker实现持续集成(CI)与持续部署(CD)

    写在前面 记录一下,一个自动化开发部署项目的构建过程与简单使用,实现真正的DevOps gitlab安装 步骤一:安装依赖 yum -y install git gcc glibc-static te ...

  2. GitLab、Jenkins结合构建持续集成(CI)环境

    1 持续集成 概述及运行流程 1.1 持续集成概述 持续集成概述:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并迚程自 ...

  3. CentOS 7 部署Gitlab+Jenkins持续集成(CI)环境

    持续集成概述及运行流程 : 持续集成概述 :持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中 ,可以频繁的将代码部署集成到主干,并进行自动化测试  开发→代 ...

  4. 基于Jenkins的持续集成CI

    CI(continuous integration)持续集成 一次构建:可能包含编译,测试,审查和部署,以及其他一些事情,一次构建就是将源代码放在一起,并验证软件是否可以作为一个一致的单元运行的过程. ...

  5. 持续集成(CI)工具------Hudson/Jenkins(Continuous Integration)安装与配置具体解释

    本文同意转载.但请标明出处:http://blog.csdn.net/wanghantong/article/40985653/, 版权全部 文章概述: 一. 描写叙述了持续集成工具Hudson的安装 ...

  6. Jenkins+Gitlab搭建持续集成(CI)环境

    利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...

  7. 【OF框架】在Azure DevOps中配置项目持续集成CI服务,推送镜像到Azure容器注册表

    准备工作 开通Azure账号,具有开通服务权限,关键是里面要有钱. 开通Azure DevOps,能够创建组织和项目. 具备一定的DevOps知识,了解CICD概念.Docker基本操作. 一.创建& ...

  8. 用持续集成工具Travis进行构建和部署

    用持续集成工具Travis进行构建和部署 用持续集成工具Travis进行构建和部署 摘要:本文简单说明了如何使用持续集成工具Travis进行构建和部署的过程. 1. 概述 持续集成(Continuou ...

  9. jenkins持续集成工作原理、功能、部署方式等介绍

    超详细的jenkins持续集成工作原理.功能.部署方式等介绍 原创 波波说运维 2019-08-29 00:01:00 概述 今天简单整理了一下jenkins的一些概念性内容,归纳如下: 1.概念 j ...

  10. 持续集成之Jenkins+Gitlab实现持续集成 [二]

    持续集成之Jenkins+Gitlab实现持续集成 [二] 项目:使用git+jenkins实现持续集成 开始构建  General  源码管理 我们安装的是Git插件,还可以安装svn插件  我们将 ...

随机推荐

  1. Cpu是如何选择线程的?

    Cpu是如何选择线程的? linux中线程存放格式 linux中线程与进程对应的结构体都是task_struct 唯一不同的点在于线程存放的东西少了点(由于一个进程中的线程们是共享一定数据的那些东西就 ...

  2. yapi tag的问题,暂时只保留一个tag

    yapi 的tag是需要先在网页上建立好,如:

  3. liveness-probe探针和readness-probe

    目录 探针 liveness-probe 存活探针 探针的3种方式 1. exec 2. httpGet 3. tcpSocket readness-probe 就绪探针 1. exec 2. htt ...

  4. .NET Core开发实战(第29课:定义仓储:使用EF Core实现仓储层)--学习笔记

    29 | 定义仓储:使用EF Core实现仓储层 首先定义仓储层的接口,以及仓储层实现的基类,抽象类 仓储层的接口 namespace GeekTime.Infrastructure.Core { / ...

  5. C++——编译和链接原理笔记

    我们在学习和开发C++程序中,理解编译和链接的原理至关重要.下面将学习一下C++程序是如何从源代码转换为可执行文件的过程,并结合示例代码进行说明.也是为了解开自己在刚学习C++的时候,编译时间长的疑惑 ...

  6. SAM题目合集

    一些SAM的 基础 题目.(主要是我不想写SAM的原理啊啊啊) 有的题目是SA的思维题,但是可以用SAM平推,基本上可以不动脑子. 除非有特殊说明,否则将字符集看作所有小写字母,构造SAM复杂度记为 ...

  7. NC14701 取数游戏2

    题目链接 题目 题目描述 给定两个长度为n的整数列A和B,每次你可以从A数列的左端或右端取走一个数.假设第i次取走的数为ax,则第i次取走的数的价值vi=bi⋅ax,现在希望你求出∑vi的最大值. 输 ...

  8. 未配置Datasource时, 启动 SpringBoot 程序报错的问题

    SpringBoot will show error if there is no datasource configuration in application.yml/application.pr ...

  9. 【Unity3D】2D动画

    1 图片处理 ​ 通过 PS 软件将以下 gif 文件中的黑色背景删除,并将其中的 18 个图层分别保存为 png 格式图片. 2 游戏对象 ​ 1)游戏对象层级结构 ​ 2)Transform组件参 ...

  10. python中两个不同shape的数组间运算规则

    1 前言 声明:本博客讨论的数组间运算是指四则运算,如:a+b.a-b.a*b.a/b,不包括 a.dot(b) 等运算,由于 numpy 和 tensorflow 中都遵循相同的规则,本博客以 nu ...