我对CICD工具使用经验及选择

软件工程师罗小东,多年架构和平台产品设计经验,以下为做开源智能体平台(AIP)的构建工具选型过程。

概述

自动化过程中,持续集成工具一直是扮演着核心的位置,是软件的基础设施之一,类似于称手的工具还有习惯会影响效率,以下为研发AIP智能体平台过程中,CICD工具的考虑和迁移情况。
这里工具的使用有一个背景,并不是每个团队都合适,以下为当前的背景:

  • 稳定性:基础设施之一,要求稳定性高
  • 微小团队:使用人数少
  • 低成本:成本尽量最小化,薅羊毛思维
  • 敏捷:构建速度要快,效果快
  • 兼容性:可以在不同CICD工具兼容
  • 可复制:微服务拆分,大同小异
  • ….

总的来说,就是稳定、减少成本、构建快、快速迁移快。

这里使用的工具对比主要从以下三个工具使用情况的迁移还有对比:

  • Jenkins: 开源持续集成工具
  • GithubAction: Github持续集成工具
  • CodeUp流水线:阿里Codeup中的流水线

项目从1-3的迁移过程中的一些使用经验及总结,当然还有其它工具(比如gitlab),每个团队工具使用不一,而且场景不一,得到的总结效果也不一,这里偏于客观中带有主观经验分享。

使用过程

经验以直接说明为主,从过程中体验和优势和劣势进行阐述说明。

Jenkins使用

这个是开始的选择,接触的公司也一直在使用这个。
但是随着项目过程构建工程的变多,服务器要求也会更高,稳定性还有维护成本更高,成本支出是一项问题。当前构建任务大概是接近百个(工程、运维、备份等),而且随着自动化程度的集成,会更多构建任务。

兼容性

以下为构建前后端的脚本:

这里执行流程尽量简单。

优势

  • 私有化程度高:可以在内部服务器上完全私有地部署,这意味着你可以全面控制数据的存储位置以及如何处理这些数据。这对于那些需要遵守严格数据保护法规或希望保持知识产权安全的企业来说非常关键。
  • 工具集成度高:拥有一个庞大的插件生态系统,几乎可以与任何你想要集成的开发工具进行对接,比如Git、Docker、Maven等。这使得它非常适合用于构建复杂的CI/CD流程。
  • 分布式构建支持:支持分布式构建环境(即Master-Slave架构),允许在多台机器上并行执行任务,从而显著提高大型项目的构建速度和效率。

劣势

  • 维护成本:尽管Jenkins是开源且免费使用的,但它的安装、配置、升级及日常维护工作可能相对复杂,特别是对于小型团队而言,可能需要专门的技术人员来负责管理。
  • 升级成本高:随着新版本不断发布,为了获取最新的功能和修复已知的安全漏洞,定期更新Jenkins变得必要。然而,升级过程有时并不简单,尤其是在高度定制化的环境中,可能会遇到兼容性问题。
  • 安全性考量:虽然Jenkins本身提供了许多安全设置选项,但由于其开放性以及广泛使用的插件体系,如果没有妥善配置安全策略,则存在被攻击的风险。此外,一些第三方插件的质量参差不齐,也可能成为潜在的安全隐患。

总结

适合那些对定制化需求较高、愿意投入资源进行管理和维护的大中型企业。其广泛的社区支持和丰富的插件库使其能够满足大多数自动化测试、构建、部署等方面的需求。

但对于AIP微小团队人员一说并不想持续工具上投入过多,连维护都不想考虑,研发人员最好忘记有这个工具的存在更好。

Github Action 使用

这里暂时不考虑搭梯子的情况。

大公司维护的产品,功能还有稳定性上是满足,插件工具集成也高,对开源项目免费,比较符合。自动化的构建及邮件通知,多种安全代码检测都有,这些针对于开源项目都是免费的,很长一段时间,只需要同步代码即可,CICD的事情基本上不用过于考虑。

兼容性

以下为构建前后端的脚本:

工程基本上可以做到不动,调整CICD脚本即可。

优势

  • 大公司维护:由GitHub官方支持和维护,这意味着它能够得到持续的更新和技术支持。对于依赖稳定性和可靠性的项目来说,这一点尤为重要。
  • 使用体验良好:界面直观友好,文档详尽且易于理解,即使是CI/CD新手也能快速上手。
  • 高稳定性:作为GitHub的核心服务之一,其性能表现相当稳定,减少了因平台问题导致构建失败的可能性。
  • 丰富的集成选项:拥有大量的预定义Actions(动作),可以直接用于常见的开发任务,如代码质量检查、自动化测试等,并且很容易与各种第三方服务集成。
  • 对开源项目友好:对于公共仓库或开源项目,GitHub Actions提供了免费的执行分钟数,这对于促进开源社区的发展非常有利。

劣势

  • 速度较慢:国内环境下,可能会遇到队列等待时间较长的问题。此外,由于服务器分布在全球各地,某些地区的网络延迟也可能影响整体运行效率。
  • 隐私与安全:虽然GitHub本身采取了多种措施来确保数据的安全性,但是你很难确保人为的不安全性行为,长期久了总会有人为疏忽概率。

总结

GithubAction有很多集成的好的工具,包括GithubPage等,但是有两个致命的因素一个是慢,另一个是安全,首先慢这个是体验性最为困难的。
另外的安全性并非说工具的安全,而是人为的操作不小心,导致日志或者其它地方的不安全因素(至少有个安全处理的过滤阶段)。

CodeUp流水线

这个是新迁移工具的使用,还有迁移中,没迁移完成,

兼容性

以下为构建前后端的脚本:

脚本会有一些较大的改动,可能使用还不熟悉,但是总的来说,使用体验会比GithubAction好一些,稳定性还在验证和体验。

优势

  • 国内环境友好:网络环境进行了优化,可以提供更加稳定的连接和服务,这对于位于中国的团队来说是一个显著的优势。
  • 私有化支持:允许在阿里云上创建私有的代码仓库和构建环境,确保敏感信息不会泄露到外部,适合对数据安全有较高要求的企业使用。
  • 免费额度:对于小规模或初创团队而言,CodeUp提供了基本的免费服务层级,有助于减少初期投入成本。
  • 与阿里云生态集成:能够无缝对接其他阿里云服务(如对象存储OSS、ECS等),简化了从开发到部署整个流程中的操作步骤。

劣势

  • 工具集成度有限:相比于Jenkins或GitHub Actions,CodeUp提供的预置Action数量较少,可能需要更多自定义脚本来实现特定功能。这增加了学习曲线,并且在某些情况下可能导致效率降低。
  • 文档和支持资源相对不足:由于推出时间较晚,关于CodeUp流水线的文章、教程以及社区讨论内容还不够丰富。用户往往需要自行探索如何最佳利用该平台的各种特性,这可能会影响到快速解决问题的能力。

总结

适用于那些希望在国内拥有良好性能表现同时又注重隐私保护的小型至中型企业。它在工具多样性和全球范围内可用的支持材料方面尚存在局限性,但对于已经采用或考虑迁移到阿里云生态系统中的组织来说,不失为一个值得探索的选择。

针对于目前的团队来说,国内网络环境会更好符合情况,体验会更好,目前也还在探索,Github转变成当前备份的环境。

总结

虽然每种工具都有各自的特点,但最终的选择应当根据团队的具体情况而定。在构建智能体平台的过程中,选择合适的持续集成/持续部署(CI/CD)工具是至关重要的。基于团队对稳定性、成本控制、敏捷性以及兼容性的需求,经历阶段都有其独特的优势与局限。

每个团队工具使用不一,而且场景不一,得到的总结效果也不一,这里偏于客观中带有主观经验分享,期望有兴趣的同学可以多交流。