持续集成与devops
持续集成
持续集成
持续集成(Continuous integration,简称CI),简单的说持续集成就是频紧地(一天多次)将代码集成到主干,它的好处主要有两个:
1、快速发现错误。每完成一次更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
2、防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。
持续交付
持续交付(Cortinuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随快可以交付的。
持续部署
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。持续部署的前提是能自动化完成测试、构建、部署等步骤。注:持续交付不等于持续集成。
持续集成的一般流程
根据持续集成的设计,代码从提交到生产,整个过程有以下几步:
1、提交:流程的第一步是开发者向代码仓库提交代码。所有后面的步骤都始于本地代码的一次提交(commit)。
2、测试(第一轮):代码仓库对commit操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试。
3、构建:通过第一轮测试,代码就可以合并进主干,就算可以交付了…
交付后,就先进行构建(build),再进入第二轮测试。所谓构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、J5脚本、图片)等等。常用的构建工具如下。jeknins、Travis、codeship等。
4、测试(第二轮)
构建完成,就要进行第二轮测试。如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然,这时构建步骤也要移到第一轮测试前面。第二轮是全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试.所有测试以自动化为主,少数无法自动化的测试用例,就要手工跑。
5、部署
通过了第二轮测试,当前代码就是一个可以直接部署的版本(artifact)。将这个版本的所有文件打包(tarfilename.tar”)存档,发到生产服务器。生产服务器将打包文件,解包成本地的一个目录,再将运行路径的符号链接(symlink)指向目录
认识 DevOps
DevOps是什么
DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。
目前对DevOps有太多的说法和定义,不过它们都有一个共同的思想:“解决开发者与运维者之间曾经不可逾越的鸿沟,增强开发者与运维者之间的沟通和交流”。而我个人认为,DevOps可以用一个公式表达:文化观念的改变+自动化工具=不断适应快速变化的市场。
强调:DevOps是一个框架,是一种方法论,并不是一套工具,他包括一系列的基本原则和实践,其核心价值在于以下两点:
更快速地交付,响应市场的变化。
更多地关注业务的改进与提升。为什么需要DevOps?
1、产品选代
在现实工作中,往往都是用户不知道自己想要什么,但是当我们设计完一个产品后,他后告诉我们他们不需要什么,这样我们的产品需要反复的选代,而且过程可能是曲折的,那我们有什么好的办法快速的交付价值,灵活的响应变化呢?答案就是Devops。因为Devops是面向业务目标,助力业务成功的最佳实践。
2、技术革新
现在的IT技术架构随着系统的复杂化不断的革新,从最期的所有服务在一个系统中,发展到现在的敛服务架构、从纯手动操作到全自动流程、从单台物理机到云平台
DevOps如何落地
落实DevOps的指导思想:
高效的协作和沟通、自动化流程和工具、迅速敏捷的开发、持续交付和部署、不断学习和创新。
我们来看一张来自devops 经典著作《success with enterprise dev-ops whitepaper》的介绍图:
敏捷管理:一支训练有素的敏捷开发团队是成功实施DevOps的关键。
持续交付部署:实现应用程序的自动化构建、部署、测试和发布。
通过技术工具,把传统的手工操作转变为自动化流程,这不仅有利于提高产品开发、运维部
置的效率,还将减少人为因素引起的失误和事故,提早发现问题并及时地解决问题
DepOps在落地实施过程中经常会遇到的问题
人手紧缺
跨部门协作,前期沟通培训成本高
前期投入工作量大见效少。
DevOps技术栈
敏捷管理工具
Trellor、Teambition、Worktile、Tower
产品&质量管理。
confluence、禅道、Jira、Bugzila.
其中confluence和禅道主要是产品的需求、定义、依赖和推广等的全面管理工具;而Jira和Bugzila是产品的质量管理和监控能力,包括测试用例、缺陷跟踪和质量监控等。目前我们使用Jira和禅道较多。
代码仓库管理
Git、Gitlab、Github
Git是一个开源的分布式版本控制系统;Gitlab和Github是用于仓库管理系统的开源项目,它们使用Git作为代码管理工具,并在此基础上搭建起来的web服务。我们主要使用的是Git和Gitlab。
自动化构建脚本
Gradle、Maven、SBT、ANT
虑拟机与容器化
VMware、VirtualBox、Vagrant、Docker
持续集成(CI)&持续部署(CD)
Jenkins、Hudson、Travis CI、Circle CI
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,日在提供一个开放易用的软件平台,使软件的持续集成变成可能,它的前身为Hudson。Travis CI是目前新兴的开源持续集成构建项目,它与jenkins很明显的区别在于采用yaml格式,简洁清新独树一帜。
Circle CI是一个为web应用开发者提供服务的持续集成平台,主要为开发团队提供测试,持续集成,以及代码部署等服务。
自动化测试
Appium
Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于105和Android以及firefox的操作系统。
Selenium
Selenium测试直接在浏览器中运行,就像真实用户所做的一样。Selenium测试可以在Windows、Linux和Macintosh 上的Internet Explorer、Mozilla和Firefox中运行。
Mock测试
Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。这个虚拟的对象就是Mock对象,Mock对象就是真实对象在调试期间的代替品。Java中的Mock框架常用的有EasyMock和Mockito等.
消费者驱动契约测试
契约测试是一种针对外部服务的接口进行的测试,它能够验证服务是否满足消费方期待的契约。当一些消费方通过接口使用某个组件的提供的行为时,它们之间就产生了契约。这个契约包含了对输入和输出的数据结构的期望,性能以及并发性。而PACT是目前比较流的消费者驱动契约测试框架。
自动化运维工具
Ansible、Puppet、Chef、Saltstack
监控管理工具
Zabbix
Zabbix是一个基于WEB界面的提供分有式系统监视以及网络监视功能的企业级开源解决方案。
ELKStack日志分析系统。
ELK Stack是开源日志处理平台解决方案,背后的商业公司是Eastic。它由日志采集解析工具Logstash、基于Lucene的全文搜索引擎Elasticsearch、分析可视化平台Kibana三部分组成。
云监控(如Amazon CloudWatch)
Amazon CloudWatch 是一项针对AWS云资源和在AWS上运行的应用程序进行监控的服务。您可以使用Amazon CloudWatch收集和跟踪各项指标、收集和监控日志文件、设置警报以及自动应对AWS资源的更改
持续集成与devops的更多相关文章
- 持续集成与Devops关系
什么是持续集成 持续集成(Continuous Integration,简称CI),是一种软件开发实践,在实践中指只要代码有变更,就自动运行构建和测试,反馈运行结果.通俗一点来讲,就是绑定项目的代码仓 ...
- [转载]持续交付和DevOps的前世今生
作者/分享人:乔梁,20年IT老兵,腾讯公司高级管理顾问,敏捷和精益开发专家,持续交付领域先行者.曾就职于百度,国内多个知名互联网公司的企业教练. 历年QCon技术大会的讲师和专题出品人. 这是一个新 ...
- 什么是 Jenkins? 运用Jenkins持续集成
[注]本文译自:https://www.edureka.co/blog/what-is-jenkins/ 持续集成是 DevOps 最重要的部分,用于集成各个 DevOps 阶段.Jenkins ...
- 【下一代核心技术DevOps】:(五)微服务CI与Rancher持续集成
1. 引言 DevOps的核心魅力是快速的持续集成交付,降低研发和实施运维之间的交互,使得传统的各种扯皮现象统统消失.最重要的是降低成本 保障产品交付可靠性. 使用Rancher作为持续集成的关键环节 ...
- 03 持续集成和部署/基础设施 - DevOps之路
02 持续集成和部署/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi 服务的持续集成和部署这里有两套 ...
- [dotnet core]落地微服务特色的DevOps管道,持续集成/部署到kubernetes。
目录 前言 目标 工具 - 最小的学习成本 方案 - 愿景 1. 持续集成 - CI 2. 持续部署 - CD 部署环境 1. 部署gitlab-runner 2. 注册gitlab-runner 搭 ...
- 在推送提交之后阻止Azure DevOps (TFS)持续集成
在Azure DevOps服务器上配置生成定义时,可以配置连续集成(CI)生成.每次签入或提交到源代码库时都会自动运行一个CI构建.这种机制允许开发人员启动一个自动化的过程,例如编译和部署构建.这是一 ...
- Android Studio 集成 TFS,实现安卓移动开发的持续集成和交付(DevOps)
目录 1 集成TFS系统.... 1.1 概述.... 1.2 安装TFS插件.... 1.2.1 在线安装方式.... 1.2.2 离线安装方案.... 1.3 常见操作.... 1.3.1 新建G ...
- 构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境
构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境 整个环境的结构图. 一.准备工作 gitlab和harbor我是安装在kubernetes集群外 ...
随机推荐
- hadoop之 hadoop日志存放路径
环境:[root@hadp-master hadoop-2.7.4]# hadoop versionHadoop 2.7.4 Hadoop的日志大致可以分为两类: (1).Hadoop系统服务输出的日 ...
- Java 利用缓冲字节流来实现视频、音频、图片的复制粘贴
InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位). OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的, ...
- Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)?
ylbtech-Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)? 1.返回顶部 1. Java 实例 - 如何执行指 ...
- Train-Alypay-Cloud:分布式微服务中间件sofa 开发培训(第二次)
ylbtech-Train-Alypay-Cloud:分布式微服务中间件sofa 开发培训(第二次) 1.返回顶部 1. 这是本次培训的内容,望各位提前配好环境.工具.2.6-2.7 我们在环球金融8 ...
- DbUtils: JDBC Utility Component Examples
DbUtils: JDBC Utility Component Examples \JDBCCollector\jdbc\src\main\java\com\ai\toptea\collection\ ...
- C++ sort使用自定义函数的一些坑
先看代码: 解释:使用自定义比较函数时,如果用了返回值恒为$true$或者恒为$false$的比较函数,就会这样子. 原因: https://stackoverflow.com/questions/4 ...
- php遍历所有文件
<?php function getdir($dir){ static $str = ''; if(is_file($dir)){ $str.=$dir.'<br>'; }else{ ...
- Filter的连接过程《转》
原文地址:https://yq.aliyun.com/articles/48113 7.Filter的连接过程 DirectShow提供了多方法来连接Filter,如IFilterGraph::Con ...
- Spring的属性文件properties使用注意
Spring的属性文件properties使用注意 Spring 中属性文件的配置 通常我们会使用properties文件来设置一些属性,如数据库连接信息,避免进行硬编码, <bean clas ...
- mysql5.7 初始化启动
root@0f6852dfee81:/# mysql --versionmysql Ver 14.14 Distrib 5.7.18-16, for debian-linux-gnu (x86_64 ...