A的构建流水线

产品A的构建流水线自动化了从编译、静态检查、打包、在不同环境下进行部署

并运行自动化测试、发布产品包以及完成最后部署整个过程。从开发人员提交修

改到源代码库中那一刻开始,剩下的所有步骤都由构建流水线自动完成。

开发人员在开发过程中,首先会在开发环境中完成开发验证,自动化测试的编写、

调试和修改,TDD,自动化构建脚本的编写,部署脚本的编写等,都在开发环境

中完成。这里是所有修改的入口,所有验证的初始发生地。我们应该尽量做到所

有的开发和验证都能够在开发环境中完成。

而当开发和验证完成,确认修改正确后,就可以将代码提交到源代码库中。持续

集成服务器持续监视着代码库的修改情况,自动将最新的修改更新到持续集成环

境中,开始从编译打包到部署的一系列自动化过程。

以A产品为例,这个自动化过程包含了若干个阶段,之所以分成若干个阶段,是

为了更加直观地展现这个过程。后面我们会谈到,因为优化的关系,不同产品的

构建流水线可能形态上会有些不同,但是它们都包含了如下几个重要阶段。

首先是打包阶段。打包是一个笼统的说法,其本质是将应用准备成能够在生产环

境中部署的形式。capistrano部署rails应用直接将源代码checkout到生产环境,

j2ee则规定了web应用必须以war包形式部署到容器中。这两种形式虽然都能够实

现部署的目的,但是更好地是将产品以产品包的形式发布出去,例如对linux平台

以rpm或者deb包的形式发布。

不论产品选择何种形式发布,有一个需求是共同的。所有产品都必需能够支持在

安装后、服务启动前对配置文件进行修改。war包是不符合这个要求的,因为配

置文件被包含在war包中,只有j2ee容器启动之后才能修改其中配置文件(现在

有一些办法能够将war包中的配置文件从war中提取出来)。

在打包之前,还有必要对包的可用性进行尽可能充分的验证。静态检查、单元测

试等任务可以在打包之前进行,如果功能测试成本不高,甚至也可以考虑放到打

包之前运行。这样,我们可以对打出来的包的功能有一定的信心。这种信心对提

升整个构建流水线的效率和正确率是很重要的,因为越往后的阶段成本相对来说

越高,反馈越慢,因此前面的阶段验证越充分,后面的阶段成功的可能性越大,

而失败之后的错误追踪也更加容易。

打包之后我们就可以将产品包部署到staging环境下进行功能测试。这个阶段的

任务首先是要准备一个干净的staging环境。为此我们必须首先准备好必须的服

务器以及网络环境,然后安装操作系统并作基本的系统配置(例如DNS等),然

后利用我们的部署脚本和产品包将产品部署到环境中去。

这个过程中很重要的一条原则就是在staging环境中和生产环境中所采用的部署

方法必须一样,是同一种方法,同一套脚本,同一组产品包。只有这样我们才能

够有信心将经过验证的产品包放心地用这一套脚本部署到生产环境中去。这就类

似于前面提到的环境相似度原则,用于staging环境的任何部署脚本、产品包如

果有和生产环境不同的地方,都有可能在生产环境中导致问题,这些问题必然会

成为我们持续部署的阻碍因素。

在环境部署好之后,就可以对环境中的产品运行功能测试。如果这些测试全部通

过,那么我们就可以选择将部署脚本和产品包发布到仓库(repository)中去。

这些交付物(artifact)会在之后的测试、部署中被用到,同时其他产品团队也会

需要这些交付物去部署它们自己的环境,进行集成测试等。

接下来是在e2e环境中的测试。首先自然也是要准备好所需要的服务器等基础设

施,然后将集成测试所涉及的所有产品都部署到该环境中去,再运行测试。

部署集成测试环境需要各产品都提供完善的部署手段,换句话说所有的产品都必

须提供能够将自己部署到一个干净环境中去所需的包、脚本、工具等。

如果集成测试也通过,那么我们就可以选择将产品包部署到实际生产环境中去了。

这一过程所包含的具体内容,视不同产品的复杂程度、生产环境的特点、组织的

策略等,可能会有很大的不同。

构建流水线的各个阶段之间的触发方式,通常是自动的,上一个阶段成功之后,

下一个阶段就会被自动触发执行。但是在某些情况下,有些阶段的触发可能是手

动的。例如publish和deploy两个阶段,在很多情况下可能是手动的。deploy阶段

的触发,因为涉及到生产环境的安全性,还往往可能需要触发的时候进行身份验

证。

php持续交付,持续交付概述相关推荐

  1. Springboot Gitlab Jenkins Maven Docker 持续集成/持续交付

    Gilab安装教程 http://blog.csdn.net/chenhaifeng2016/article/details/78603216 http://blog.csdn.net/chenhai ...

  2. SAP开源的持续集成-持续交付的解决方案

    SAP开源的持续集成/持续交付的解决方案: (1) 一个叫做piper的github项目,包含一个针对Jenkins的共享库和一个方便大家快速搭建CI/CD环境的Docker镜像: (2) 一套SAP ...

  3. 某银行大型管理系统端到端持续集成和交付实践

    背景 传统的银行IT系统研发流程从需求提出到产品交付往往具有较长的研发周期,纵观银行当下面临的市场环境,个人信贷消费升级,资管需求旺盛,普惠金融成为国家战略,来自银行同业和互联网金融的压力扑面而来,谁 ...

  4. 持续集成持续部署持续交付_如何开始进行持续集成

    持续集成持续部署持续交付 Everything you need to know to get started with continuous integration: branching strat ...

  5. 持续集成持续部署持续交付_自动持续开发和交付混合移动应用程序

    持续集成持续部署持续交付 对于当今的组织而言,提供移动应用程序本质上是一项业务需求. 开发应用程序的第一步之一就是了解不同的类型(本机,混合(或跨平台)和Web),以便您可以确定哪种类型最能满足您的需 ...

  6. 初学者的持续集成和交付(DevOps)

    目录 介绍 背景 先决条件 第1步--创建部署组 步骤2--在内部部署服务器中安装VSTS代理 第3步--配置构建操作 第4步--设置发布 第5步--启用CI和CD 您可能会发现一些有用的提示 1.请 ...

  7. CI Weekly #5 | 微服务架构下的持续部署与交付

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  8. 【DevOps研发管理方案】四:持续集成 持续交付

    目录 一.持续集成 1. 构建触发规则 2. 构建初始化 3. 构建目录 4. 全量构建 5. 构建配置 二.持续交付 1. 部署与发布模式 2. 持续部署流水线 3. 参数配置 一.持续集成 1. ...

  9. 持续集成和交付流水线的反模式

    原文发表于:https://www.rea-group.com/blog/continuous-integration-and-delivery-pipeline-mistakes/ CI/CD &a ...

  10. 【持续集成和交付】项目环境配置:在Jenkins中运行项目

    前言 一直想学习自动化测试,但是都没行动,业余时间学习零零碎碎并记录20210424. 11.持续集成和交付 Jenkins环境搭建 项目环境配置 邮件通知 定时项目执行 在Jenkins中运行项目 ...

最新文章

  1. JSTL标签库学习笔记
  2. Python:爬虫框架Scrapy的安装与基本使用
  3. 你值得拥有!一个基于 Spring Boot 的API、RESTful API 的项目
  4. 连接查询,结构、循环语句
  5. C++面向对象类的实例题目一
  6. 数据结构算法入门--一文了解什么是复杂度
  7. mysqli_fetch_row,mysqli_fetch_array,mysqli_fetch_assoc区别
  8. free命令查看内存信息
  9. XAMPP的安装及配置使用教程
  10. QT自动检测系统语言代码
  11. office怎么像wps一样多栏_WPS文档分栏设置,让排版更完美 Word2010如何分两栏、三栏、多栏技巧...
  12. 信息系统项目管理师学习笔记16-项目变更管理
  13. 从零开始搭建一个自己的脚手架
  14. 下列计算机程序设计语言中不属于高级语言,下列计算机程序设计语言中不属于高级语言的是()?...
  15. 北邮C++——破解简单密码
  16. 自制Openerp图表
  17. android linux 休眠 深度睡眠 查看 方法 调试
  18. 面试题:群聊消息的已读未读设计
  19. 视觉设计需要学什么?
  20. vue实现表格列位置的拖拽

热门文章

  1. 201312-1-出现次数最多的数
  2. 华为手表表盘的数字什么意思_手表的陀飞轮、月相、逆跳都是什么意思?
  3. html语言arc属性,为要素图层设置 HTML 弹出窗口属性
  4. Ubuntu使用谷歌浏览器登录账号时崩溃
  5. 计算机电池功能,蓄电池检测仪的主要功能都有哪些
  6. java项目不要用反射_面试官:Java 反射是什么?我回答不上来!
  7. EDA实验课课程笔记(一)——linux操作系统及linux下的基本指令
  8. Qt部件学习之-烧鹅
  9. html5开发桌面程序调用dll,使用Visual Studio开发Html5应用
  10. Craking the Interview-1