项目DevOps研发云CI实践之路

简介: 本文讲的是项目DevOps研发云CI实践之路【编者的话】DevOps是Develop与Operations的缩写。DevOps不是凭空冒出来的,是我们持续集成思想的延伸。
本文讲的是项目DevOps研发云CI实践之路【编者的话】DevOps是Develop与Operations的缩写。DevOps不是凭空冒出来的,是我们持续集成思想的延伸。

使用敏捷或其他软件开发过程与方法,项目要求加快产品交付的速率,虚拟化和云计算基础设施(可能来自内部或外部供应商)日益普遍,都促使我们不断向DevOps方向发展。

因此,现在的业务开发,对传统的CI提出了更新更高的要求,借助于云技术,我们可以在DesOps趋势下实现从传统CI向云化CI的演变。

一、项目痛点

笔者所在项目在敏捷推进过程中,已经建立了一套以Jenkins为核心的CI持续集成系统,相信很多项目也是通过Jenkins来构建项目自己的CI防护网的。
01.jpg

02.png

基于CI持续集成系统对敏捷的重要性,稳定和高效成为了CI集成系统最重要的两个要素。

在实际使用过程中,各种类型的编译环境,部署安装、配置维护,成本越来越大,工作重复、效率低;随着CI集成越来越复杂,对设备的性能、稳定性要求越来越高,维护成本也越来越高,越来越专业,需要人员有专门的技能才能维护。

同时随着敏捷的深入,快速交付、快速部署,对CI集成时间、周期、效率提出了更高的要求,CI系统的效率和反馈速度也成为瓶颈。产品级敏捷也期望能够全程监控CI的过程质量,全方位度量、质量保证,对CI系统提出了更高的要求。

综上所述,总结一下项目在持续集成方面的痛点:
  • 效率低下
  • 环境复杂
  • 基础设施维护困难
  • CI质量状况难以实时监控

二、解决思路

现在DevOps概念在业界比较火热,并逐渐成为趋势。这也让我们觉得借助云计算和DevOps理念来进一步持续推进传统CI,正是我们需要的。
03.jpg

04.png

三、实践情况

1、入云方案

(1)OKR驱动

OKR驱动,本着向更有价值,更有挑战性的目标冲刺的原则。

在部门的改进工作坊上,结合项目的痛点,大家一起制定了项目的DevOps贯通OKR计划。跟随着公司研发云项目的不断演进过程中,逐渐认识到云CI在DevOps推进过程中,越来越扮演着非常重要的角色。

经过研究,云CI使用到的Jenkins和Docker技术,以及云内的计算资源,能够助力后面的云托管、云构建,所以CI上云成为我们DevOps推进中非常有价值的事情。

(2)总体方案
借助云计算的发展,传统CI向云CI进行演进。
05.jpg

  • CloudCI(http://cloudci.zte.com.cn/
    云Jenkins服务器,优势:CloudCI是基于Docker集群的云Jenkins服务器
  • Mesos集群(基于Docker,CloudCI已集成为Mesos节点)
    海量云资源,优势:可共享,随用随申请,使用结束自动释放。
  • Docker镜像仓库
  • Mesos集群+Docker镜像,构成CI任务执行环境

(3)总体流程
流水线任务优化和拆分,串行变并行,资源云化,度量及时反馈。
06副本.jpg

  • Step1 代码入库
    代码通过Pha评审,提交到代码托管SVN仓库。
  • Step2 Jenkins任务执行
    代码入库,触发云Jenkins服务器执行CI任务,CI任务并行同时触发执行。CI整流水线速度取并行任务的最长时间,相比原来的串行累加速度提升明显。
  • Step3 数据采集
    数据采集任务,在CI任务执行过程中采集项目度量数据(如代码行数、静态检查数据等),以及CI任务的执行次数、成功率等数据。以Shell和Python为主的脚本库作为数据采集的支撑,采集数据自动接入无线度量系统。
  • Step4 度量报告
    在度量系统建立统计模型,每天以邮件方式自动输出度量报告,用于项目/团队及时反馈和改进开发,形成闭环。

2、CI入云准备

(1)执行环境标准化
主要的原则是:环境分类、标准化,利用Docker技术资源云化。
07.jpg

执行环境标准化的目的是将CI任务按照运行环境分类管理,并且梳理出每个任务运行所依赖的环境要求(重点:操作系统以及软件)。

以我们项目IaaS版本构建为例:
  • 操作系统:Linux
  • 编译工具:交叉编译链
  • 其余软件:tcl、bc、zip、bzip2

最终,执行环境需要使用Docker技术实现容器化,实现Ship&Run。

(2)CI任务整理优化
主要的原则是:任务拆分,去依赖和状态,串行变并行。
  • Job拆分:根据项目特性拆分,以更好的利用云端弹性伸缩特性
  • 去依赖化:隔离CI全流程中工具链等因素对物理机/虚机的依赖
  • 去状态化:转化/消除CI全流程中各job对于实体机/虚机状态化的需求,如各种缓存等

3、部署实施

(1)CI任务配置执行 
08.jpg

相比于以前,现在CI Jenkins任务的部署就非常简单,尤其是使用Mesos集群的任务,可以简单到只需要下面这样Pull&Run:
docker pull mirrors.zte.com.cn:5000/ft-cloudci-centos:latest
docker run --rm mirrors.zte.com.cn:5000/ft-cloudci-centos

4、相关技术

因为需要使用到Linux、Docker和Jenkins,所以这些相应的技术要熟悉。

另外,CI任务改并行后,必须要考虑多任务并行时,代码文件(含二进制文件)在Mesos集群机器中动态挂载的问题。

经过实践,建议的文件挂载方式如下:
  • Svn全量检出
    低效不建议采用,参考数据:1.8G代码,下载速度:8-15min。
  • Git/Gerrit全量检出
    高效,参考数据:1.8G代码,下载速度:云内30-40s,云外1-2min。
  • Rsync全量同步
    高效,参考数据:1.8G代码,下载速度:云内2-4min。
  • 增量更新+网络共享
    未来的优化方向,研究中。代码增量更新,通过网络共享(NFS/Ceph)到Mesos集群,然后再docker –v挂载到运行容器。

四、效果评价

通过CI上云,解决了项目CI的四个痛点。

现状:版本已经上线,任务优化和拆分,串行变并行,资源云化

收益:
  • 效率:Jenkins任务串行变并行,整版本构建速度和流水线运行速度大幅提升
  • 环境:环境构建实现自动化与标准化
  • 基础设施维护:公司统一维护,无需项目额外指定专人维护
  • 质量控制:度量系统实时监控,及时反馈

原文链接

原文发布时间为:2016-12-05

本文作者:尼古拉斯

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:项目DevOps研发云CI实践之路

相关文章
|
1月前
|
运维 安全 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在数字化转型的浪潮中,企业对于IT基础设施的要求越来越高,不仅需要快速响应市场变化,还要确保系统的稳定与安全。本文深入探讨了如何通过融合DevOps文化和容器化技术来构建一个高效、稳定且易于管理的云基础设施。通过实际案例分析,阐述了持续集成/持续部署(CI/CD)流程的优化、自动化测试、监控以及日志管理等关键环节的实施策略,旨在为运维专业人员提供一套切实可行的解决方案。
29 3
|
3月前
|
运维 Cloud Native Devops
云原生 DevOps CI/CD 概述
【1月更文挑战第7天】云原生 DevOps CI/CD 概述
|
1月前
|
运维 Kubernetes Devops
构建高效可靠的云基础设施:DevOps与容器化技术融合实践
【2月更文挑战第30天】 在当今快速迭代和竞争激烈的软件开发领域,传统的IT运维模式已难以满足业务发展的需要。本文将探讨如何通过整合DevOps文化和容器化技术,构建一个既高效又可靠的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作流的影响,接着深入讨论了容器化技术的优势和挑战,并提出了一套结合两者的实施方案。最后,通过案例分析展示了该方案在实际环境中的应用效果和潜在益处。
|
6月前
|
Devops jenkins Java
【devops】六、CI、CD入门操作
【devops】六、CI、CD入门操作
|
10天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
12天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第13天】 在当今快速迭代和持续部署的软件开发环境中,传统的IT运维模式已难以满足业务发展的需求。本文聚焦于如何通过融合DevOps理念与容器化技术,构建一个高效、稳定且易于管理的云基础设施。文章将探讨持续集成/持续交付(CI/CD)流程的优化、容器化技术的最佳实践、以及微服务架构下的应用管理,以期为企业提供一种改进运维效率、加速产品上市时间,同时保障系统稳定性的解决方案。
|
27天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
随着企业数字化转型的不断深入,传统的IT运维模式已经难以满足快速迭代和持续交付的需求。本文将探讨如何通过结合DevOps文化与容器化技术,构建一个既高效又稳定的云基础设施。文章首先概述了DevOps的核心理念及其在现代运维中的重要性,然后详细介绍了容器化技术,特别是Docker和Kubernetes在实现微服务架构中的应用。最后,文中通过案例分析展示了这一融合实践如何在真实环境中提升运维效率和系统稳定性。
21 7
|
30天前
|
运维 Kubernetes 监控
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在当今云计算时代,企业追求敏捷性、可扩展性以及成本效益的云基础设施。本文将探讨如何通过DevOps文化与容器化技术的融合,打造一个既高效又稳定的运维环境。文章不仅阐述了DevOps和容器化技术各自的优势,还提供了一个具体的实施案例,展示了这种结合如何优化资源利用、提高部署速度并降低运维复杂性。
|
1月前
|
Kubernetes Cloud Native Devops
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
51 1
|
1月前
|
Kubernetes Devops Java
云原生技术落地实现之一KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (1/2)
云原生技术落地实现之一KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (1/2)
42 0
云原生技术落地实现之一KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (1/2)

热门文章

最新文章