四平做网站佳业网络,制作二维码的微信小程序,免费公文写作网站,网站建设与维护中源宝导读#xff1a;“持续集成”是敏捷最佳实践中#xff0c;保证高质量交付的关键环节之一。本文将分享#xff0c;在大规模研发在线协同的背景下#xff0c;如何支撑在线持续集成的高性能和高可用。 一、什么是持续集成 在《持续集成》一书中#xff0c;对持续集成的定… 源宝导读“持续集成”是敏捷最佳实践中保证高质量交付的关键环节之一。本文将分享在大规模研发在线协同的背景下如何支撑在线持续集成的高性能和高可用。 一、什么是持续集成 在《持续集成》一书中对持续集成的定义如下持续集成是一种软件开发实践。在持续集成中团队成员频繁集成他们的工作成果一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验以尽快发现集成错误。自从在团队中引入这样的实践之后Martin Fowler发现这种方法可以显著减少集成引起的问题并可以加快团队合作软件开发的速度。 集成 集成就是一些孤立的事物或元素通过某种方式集中在一起产生联系从而构成一个有机整体的过程。知识经济的社会集成已经成了很重要的一个名词。各行各业基本都会用到集成。比如汽车行业那么复杂的一台跑车愣是通过一大堆零件组装起来。对于这些传统行业它们在研发成功以后可以通过流水线的方法批量生产进行集成。而在软件行业中集成并不是一个简单的“搬箱子”的过程。因为软件工业是一个知识生产活动其内在逻辑非常复杂需求又很难一次性确定完成的产品与最初的设计往往相差很远。敏捷宣言中就有一条是说响应变化重于遵循计划。而且由于软件行业的迅猛发展软件变的越来越复杂单靠个人是根本无法完成。大型软件为了重用及解耦往往还需要分成好几个模块这样集成就成了软件开发中不可或缺的一部分。 持续 “持续”并不意味着“一直在运行”而是“随时可运行”。在软件开发领域它还包括几个核心概念/最佳实践。这些是 自动化流程实现关键是用自动化流程来处理软件生产中的方方面面。这包括构建、测试、分析、版本控制以及部署。 可重复如果我们使用的自动化流程在给定相同输入的情况下始终具有相同的行为则这个过程应该是可重复的。也就是说如果我们把某个历史版本的代码作为输入我们应该得到对应相同的可交付产出。这也假设我们有相同版本的外部依赖项。理想情况下这也意味着可以对管道中的流程进行版本控制和重建。 快速迭代“快速”在这里是个相对术语但无论软件更新、发布的频率如何预期的持续过程都会以高效的方式将源代码转换为交付物。 组成 持续集成一般包括自动编译、自动构建、自动打包、自动部署、自动代码检查、自动化测试。 二、为什么要做持续集成 项目中常见的问题 集成时发现系统无法运行 不同分支之间合并代码经常出错 加班加点改BUG 重复进行手工的部署、调试、测试、发布成本高风险大。 团队文化问题 对交付软件的质量意识不足 无法做到优先处理失败的构建 工程师文化不足 团队管理、流程的不足。 持续集成的优点 持续集成能提升交付效率和交付软件的质量 能及时反馈结果尽早发现问题 通过自动化代替手工工程师将更多的时间精力放在设计、需求分析、风险预防等方面 通过持续集成提高自动化程度来提高效率。 三、持续集成工具选型 市面上的持续工具很多下面列举了部分 AnthillPro商业的构建管理服务器提供CI功能 Bamboo商业的CI服务器对于开源项目免费 Build Forge多功能商业构建管理工具特点高性能、分布式构建 Cruise Control基于java实现的持续集成构建工具 CruiseControl.NET基于C#实现的持续集成构建工具 Jenkins基于java实现的开源持续集成构建工具现在最流行和知名度最广泛的持续集成工具 Lunt build开源的自动化构建工具 Para Build商业的自动化软件构建管理服务器。 综合考虑团队选取了Jenkins作为持续集成工具主要的选型理由是 开源 成熟度活跃度高 分布式 插件丰富、功能强大 团队成员比较熟悉都或多或少使用过。 四、研发协同平台持续集成工作原理 研发协同平台持续集成整个工作流程如下 开发人员提交代码到代码仓库 研发协同控制台触发持续集成任务 持续集成主节点进行任务调度将构建任务分发到构建从节点将部署任务分发到部署从节点将质量任务分发到质量从节点 构建节点获取代码按照构建脚本执行构建打包 部署节点按照部署脚本将服务部署到容器中 质量节点按照相应脚本进行静态的代码扫描、运行单元测试 持续集成主节点通过回调机制将任务状态实时回传到研发协同控制台。 五、研发协同平台持续集成管道 一个持续集成管道由一系列持续集成作业组成 持续集成管道中的作业可以是串行也可以是并行 管道中的作业由一组命令组成 命令是持续集成中的最小单元 研发协同平台内置了一批命令集 不同的命令组合成不同功能的作业 不同功能的作业组合成不同功能的管道 研发协同平台上不同服务类型的持续集成使用不同的管道。 六、研发协同平台持续集成特性 研发协同平台的持续集成具有如下特性 一键集成 用户一键完成整个集成过程无需额外的配置和操作简单、快捷、方便 开箱即用 研发协同平台内置了公司所有产品持续集成所需要用到的命令、作业、管道用户无需额外工作开箱即用 灵活配置 如果已有持续集成过程需要调整只需调整已有作业的命令集已有管道的作业即可 如果有新的服务类型要做持续集成只需根据命令自由组合新的作业根据作业自由组合新的管道即可完成对新服务类型的持续集成支持 可扩展研发协同平台内置了一批命令集、作业、管道。如果不满足需求可以很方便的添加新命令从而组建新的作业和管道实现功能扩展 分布式 研发协同平台使用持续集成工具Jenkins的主从特性主节点只做任务的调度和分发具体作业执行在各个从节点上实现分布式执行 负载平衡 从节点分为构建节点、部署节点、质量节点三类每一类都由一组节点组成集群在主节点将任务分发到从节点时可根据负载规则分发到集群中的某一个具体节点上执行。当前支持的负载规则有随机分配、顺序分配、按资源使用情况分配、指定具体节点分配。 七、持续集成工具Jenkins运维 研发协同平台持续集成使用了Jenkins作为持续集成工具保障Jenkins的安全、性能、高可用对Jenkins的持续运维也是很重要的一部分。 安全 安全矩阵 在Jenkins管理- 安全配置- 访问控制- 安全矩阵中可配置用户的访问权限。 安全漏洞 Jenkins是开源软件安全漏洞爆出的频率较高易于受到攻击防止攻击的一个有效手段就是即使升级Jenkins版本修补漏洞。 升级 如何升级资料很多这里就不做赘述但有一些事项需要注意 Jenkins主版本升级并不能保证插件的兼容性升级可能会导致一些插件不可用要检查正在使用的插件是否需要同步升级 有些插件在升级后也不能完全保证兼容升级后也有可能需要做一些相应的调整和修改对于在用的插件在升级前也要做评估 Jenkins 141之后版本加入了soft kill的功能会导致所有的windows节点执行耗时很长甚至卡死。需要在所有的windows主从节点上的配置文件中添加启动参数 -DSoftKillWaitSeconds0 来解决此问题。 性能 不要在主节点上执行任务主节点只做任务的调度和分发 清理旧数据在jenkins管理- 管理旧数据中可清理旧数据 不要保留太多的构建历史记录可定时清理构建历史。可在在jenkins管理- 脚本控制台 执行清理脚本来清理构建历史 下面的示例脚本是保留10条构建历史记录 --保留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 0for(int i numberOfBuildsToKeep; i builds.size()-j; i) {builds.get(i).delete()i--jprintln Deleted: builds.get(i)}
}
} 在Jenkins的启动参数中调整jvm内存大小默认是512M, 可以根据需要调大一些。 高可用与灾备 集群 Jenkins是主从模式从节点可以做集群、负载从而实现从节点的高可用但是主节点是单节点一旦主节点宕机会导致Jenkins服务不可用。Jenkins主节点本身是不支持集群的需要通过其他变通方式来实现。当前我们也未实现主节点高可用有计划的是会做主备模式如果主节点宕机可快速切换到备用节点恢复服务。 备份 安装thinBackup插件 在thinBackup插件中设置定时备份策略进行定时备份。 监控性能监控 安装monitoring插件 在Jenkins管理- Jenkins主节点监控中可查看监控Jenkins主节点性能数据。 健康检查 接入研发协同的监控服务检查Jenkins服务的可用性。 写在最后 当前研发协同平台已经能全面支持公司产品各种场景的持续集成后续会进一步落地持续集成工具jenkins主节点的高可用进一步探索支持多种持续集成工具的必要性和可行性。 ------ END ------ 作者简介 陆同学 架构师负责研发协同平台产品的架构规划与设计工作。 也许您还想看 如何解决大批量数据保存的性能问题 基于消息的高稳定集成架构方案 研发协同平台架构演进 通过在线编码提高前端代码质量的探索与实践 MIP服务发现的高可用架构实践