研发协同平台持续集成实践

2020-01-23  本文已影响0人  让思想飞会儿

导读

    研发协同平台有两个核心目标,一是提高研发效率 ,二是提高研发质量,要实现这两个核心目标,实现持续集成是关键之一。

什么是持续集成

    在《持续集成》一书中,对持续集成的定义如下:持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。自从在团队中引入这样的实践之后,Martin Fowler发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度。

集成
    集成就是一些孤立的事物或元素通过某种方式集中在一起,产生联系,从而构成一个有机整体的过程。知识经济的社会,集成已经成了很重要的一个名词。各行各业基本都会用到集成。比如汽车行业,那么复杂的一台跑车愣是通过一大堆零件组装起来。对于这些传统行业,它们在研发成功以后,可以通过流水线的方法批量生产进行集成。而在软件行业中,集成并不是一个简单的“搬箱子”的过程。因为软件工业是一个知识生产活动,其内在逻辑非常复杂,需求又很难一次性确定,完成的产品与最初的设计往往相差很远。敏捷宣言中就有一条是说响应变化重于遵循计划。而且由于软件行业的迅猛发展,软件变的越来越复杂,单靠个人是根本无法完成。大型软件为了重用及解耦,往往还需要分成好几个模块,这样集成就成了软件开发中不可或缺的一部分。

持续
    “持续”并不意味着“一直在运行”,而是“随时可运行”。在软件开发领域,它还包括几个核心概念/最佳实践。这些是:

组成
    持续集成一般包括自动编译、自动构建、自动打包、自动部署、自动代码检查、自动化测试。

为什么要做持续集成

项目中常见的问题

团队文化问题

持续集成的优点
持续集成能提升交付效率和交付软件的质量:

持续集成工具选型

市面上的持续工具很多,下面列举了部分

综合考虑,团队选取了Jenkins作为持续集成工具,主要的选型理由是:

研发协同平台持续集成工作原理

研发协同平台持续集成工作原理

研发协同平台持续集成整个工作流程如下:

  1. 开发人员提交代码到代码仓库;
  2. 研发协同控制台触发持续集成任务;
  3. 持续集成主节点进行任务调度,将构建任务分发到构建从节点,将部署任务分发到部署从节点,将质量任务分发到质量从节点;
  4. 构建节点获取代码,按照构建脚本执行,构建,打包;
  5. 部署节点按照部署脚本,将服务部署到容器中;
  6. 质量节点按照相应脚本,进行静态的代码扫描、运行单元测试;
  7. 持续集成主节点通过回调机制,将任务状态实时回传到研发协同控制台。

研发协同平台持续集成管道

持续集成管道图 持续集成作业图

研发协同平台持续集成特性

研发协同平台的持续集成具有如下特性:

持续集成工具Jenkins运维

    研发协同平台持续集成使用了Jenkins作为持续集成工具,保障Jenkins的安全、性能、高可用,对Jenkins的持续运维也是很重要的一部分。

安全

安全矩阵
    在Jenkins管理-> 安全配置-> 访问控制-> 安全矩阵中,可配置用户的访问权限。

安全漏洞
    Jenkins是开源软件,安全漏洞爆出的频率较高,易于受到攻击,防止攻击的一个有效手段就是即使升级Jenkins版本,修补漏洞。

升级
    如何升级,资料很多,这里就不做赘述,但有一些事项需要注意:

性能

--保留`10`条构建历史记录
def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
      builds = it.getBuilds()
      println "total builds: " + builds.size()
      def j = 0
      for(int i = numberOfBuildsToKeep; i < builds.size()-j; i++) {
        builds.get(i).delete()
        i--
        j++       
        println "Deleted: " + builds.get(i)
      }
    }
}

高可用与灾备

集群
    Jenkins是主从模式,从节点可以做集群、负载,从而实现从节点的高可用,但是主节点是单节点,一旦主节点宕机,会导致Jenkins服务不可用。 Jenkins主节点本身是不支持集群的,需要通过其他变通方式来实现。当前我们也未实现主节点高可用,有计划的是会做主备模式,如果主节点宕机,可快速切换到备用节点,恢复服务。

备份

监控

性能监控

健康检查

写在最后

    当前研发协同平台已经能全面支持公司产品各种场景的持续集成,后续会进一步落地持续集成工具jenkins主节点的高可用,进一步探索支持多种持续集成工具的必要性和可行性。

上一篇 下一篇

猜你喜欢

热点阅读