如果说软件是数智化时代的基石,那么源代码就是数智化时代的灵魂。所有的软件都是有源代码组成(编译而来)。因此在某种程度上,源代码是现代化企业最核心的数字资产,如何对源代码做到安全、高效管理,是每一个现代企业管理者需要考虑的事情之一。
所谓的源代码管理主要是对源代码变更进行追踪和版本控制,以便开发人员能围绕一套源代码进行协作,避免对别人的代码进行覆盖,同时还能对所有的变更做到安全审计。这些年随着企业数字化转型的加速,源代码托管的市场也水涨船高。根据 Acumen 给出的源代码管理软件市场分析报告显示:2021 年源代码托管市场的大小为 $611.2 M,而到了 2030 年,这一市场将飙升为 $1,289.4 M,而且从 2022 年 - 2030 年,这一市场的年复合增长率(CAGR)为 8.7%。
因此,打造一个单一可信的源代码托管平台不仅能为企业的数字化转型夯实基础,还能够在这一足够大的市场中“分一杯羹”。
一个成熟稳定的单一可信源代码托管平台,应该包含三个主要因素:安全、高效、便捷。
安全是源代码托管平台的核心。源代码的损失会直接给企业带来经济损失,比如核心产品的代码因为泄漏而被竞争对手获取,就可能会有同类型产品进入市场,从而加剧竞争;抑或代码的泄漏会引起客户的担忧(万一代码被不法组织拿到,找到其中的漏洞,对客户进行攻击),严重的话可能会导致客户的流失。因此,安全是构建源代码托管平台首先要考虑的关键要素。
源代码托管平台的安全是一种立体防护安全体系:平台自身是安全的、能保证托管代码的安全、源代码构建的应用是安全的。
首先需要保证平台是安全的,因为平台是基座,基座的安全才能保证托管代码的安全。
这就需要平台的研发团队对于安全要有足够的重视,需要有专门的安全团队,不断挖掘平台自身的安全问题,然后及时进行补丁修复。这个过程可能需要一些其他流程来配合,比如完整的发版流程(最好是自动化的),这样可以频繁发布版(包括正式版和安全补丁版);透明的通知流程,当有安全问题被发现,除了需要快速修复外,还需要及时通知给相应的用户(或客户),提醒用户(或客户)及时进行补丁修复,避免带来重大安全隐患。
此外,还需要平台具备完整、高度安全的账号管理体系,比如具备业界常用的多因素认证、密码复杂度等安全功能,在平台的登陆和使用上进行安全把关。
其次,需要保证托管代码的安全,这是源代码托管平台的核心。
通常来讲,源代码是以项目(Project 或者 Repo)为基本单元进行托管管理,而项目也可以进一步进行组合来简化托管管理。这个过程中,需要遵从最小权限原则对于托管代码进行精细化的权限管理,以确保只有被授权的用户才能够对被授权的资源进行特定的操作(比如读、写等)。
此外,还需要针对项目的分支、代码提交等做出对应的安全管控,这不仅能有效防止不安全代码被合入仓库,防止代码爆仓,而且能帮助团队构建安全编码流程,打造安全的团队文化;安全事件审计,比如任何人对代码仓库的任何操作都应该留有审计日志,方便安全审计人员对于相关事件进行审计、追溯等。
最后,还需要保证托管代码所构建出来的应用程序是安全的,因为构建出来的应用程序是需要交付给用户(或客户)的,也就是价值最大的一环。
因此,源代码托管平台不仅仅只是作为一个代码的存储仓,还应该具备一些应用程序安全测试能力,比如传统的 SAST、DAST 等。这样可以通过内置的多种安全测试手段来尽可能多的挖掘代码中的潜在安全风险,减少应用程序上线以后的攻击面,提高整体的安全性。
简言之,一个安全可信的源代码托管平台,需要具备多种安全防护能力,最终构建起一个立体的防护体系,真正做到托管源代码的安全。这也就是单一可信源代码托管平台的核心使命。
源代码托管平台是为了方便研发人员通过协作来完成软件的研发,因此效率就成为了不得不考虑的因素,尤其随着研发人员规模的扩大,甚至出现研发人员跨地域、跨时区协作时,高效协作就成为了软件研发的关键。这里面的高效也应该是多维度的。
企业的组织架构往往是一种树状架构,而且随着企业规模的扩大、产品线的增多,树状结构的层级也会越多。在这种情况下,必然会有大量的代码仓库,而如何对数量繁多的代码仓库进行有效管理就变得尤为重要。这不仅关系到团队内部、团队之间甚至部门之间是否能高效协作,而且还对安全体系的建立有重大影响,比如代码仓库的权限管理、用户的权限管理等。
因此,源代码托管平台是否能够将代码仓库的管理与企业组织架构或者产品线架构进行映射,并且能够进行精细化的权限管理,是代码仓库能够高效管理的有效手段。
代码的拉取与推送是与研发人员密切相关的两种最基本操作,其体验也是最考验研发人员心智的。尤其当代码仓库达到 GB 甚至十几 GB 以上时,如果拉取代码(clone)的体验非常差(比如网速很差、比如操作人员过多,导致代码托管服务器响应变慢等),就可能导致研发人员不愿意频繁拉取代码,让本地仓库和远端仓库保持一致,在这种情况下,如果推送代码到远端仓库,就极容易引起冲突。
此外,在现在普遍实践分支开发模式的情况下,对于分支的管理(创建、合并、删除等)也是提高协作效率的重要手段。
源代码只是一堆静态的内容,其真正的价值体现(对于用户或者客户来讲)是在变为处于运行态的应用程序,也就是从源码到上线,从静态到动态的转变,这个过程就涉及源代码的管理、构建、测试、部署上线等,如果要高效实现整个流程,最好的方法就是将这些步骤或者流程用自动化进行简化,而这也就是现在常说的 CI/CD。
因此,一个成熟的源代码托管平台应该内置一些 CI/CD 能力,或者至少具备和第三方工具进行集成来实现 CI/CD 的能力。这样不仅能够让研发人员在提交完代码以后,可以快速看到变更代码的效果,确定是否符合预期,还能够实现软件从 idea 到 production 的快速交付,让“fail fast,fix fast,feedback fast”真正落地实践,也能真正实现现代化软件的敏态研发与交付。
这里面的便捷应该具备多层含义:
对于用户来讲,安装简单、配置方便能够大大降低源代码托管平台的使用门槛。比如用户可以自行在官网上下载对应的安装包(根据 OS、版本需求等),然后一键完成安装。如果后面的使用中需要对配置进行修改,则可以在修改后通过简单的 reload 功能在短时间内完成变更的更新,从而避免对业务的长时间影响。
平台的易用性也是非常重要的。这里面不仅包含平台界面的用户友好体验,还包括要有详尽的文档等。当用户初次登陆平台界面后,只需要简单探索(如点击页面按钮)就能够明白平台的主要功能。而用户如果想要深入学习,则平台应该有详细的文档,对于平台的所有功能使用进行介绍,方便用户跟着文档一边学习一边实践。这些便捷都将大大降低用户的学习、使用成本,极大地提高用户体验,而且很容易扩大用户使用群体。
源代码托管平台应该具备一些外延功能,比如能够和第三方工具进行集成,从而打造基于源代码的一些生态。最典型的如现在流行的 DevOps,源代码需要经过自动化的构建、测试、安全扫描,最终部署到生产环境,交付给用户(这个就是传说中的 CI/CD 要做的事情)。整个流程需要多种工具链的配合,而这些工具链都是围绕源代码或源代码产生的其他二进制文件而展开的,这也就需要这么多工具链能够和源代码托管平台进行高度集成,进而方便流程的自动化、数据的可视化等。而这种集成往往又是通过 API 来实现的,因此也就意味着源代码托管平台需要有丰富的 API 以帮助构建起丰富的软件交付生态。
GitLab 是一款为大众所熟知的开源源代码托管软件,从 2011 年写下第一行代码至今,已经走过了 12 个年头,而且持续保持月度发版的版本发布频率,每次都会大量更新与源代码托管相关的功能,发展至今,已经成为一个便捷易用、安全与效率兼备的源代码托管平台,在全球有超过 3000 多万用户。
极狐GitLab 作为 GitLab 在国内的发行版,是 GitLab 除 CE、EE 之外的另一个版本(简称 JH 版),主要聚焦在为国内用户提供一流的源代码托管产品及服务。同时极狐GitLab 遵从开源社区的最佳理念:upstream first 和上游 GitLab 进行开源协作,保证了上游最新功能的时刻追随,同时也将很多国内用户的需求贡献到上游,惠及全球用户。
极狐GitLab 是完全开源开放的,具备完整的源代码托管功能,兼具安全、高效和便捷。
极狐GitLab 是一款“default security”的源代码托管产品,其安全性兼具深度和广度,构建起了一个纵深防御体系。而且很多安全功能都是内置、开箱即用的,无需用户集成或者安装第三方产品来实现,只需要简单开启即可使用。
在 Gartner 和 Forrester 的相关测评中,GitLab 的安全能力都是处于领先位置。
极狐GitLab 的高效性主要体现在以下几个方面:
极狐GitLab 使用 Group 来进行项目/仓库的组织管理,Group 可以实现多极嵌套,这样就实现了组织架构层级和代码仓库托管层级的映射,让代码仓库管理变得清晰简单。还可以将组织人员信息和项目成员进行映射,完成基于角色的访问权限控制,实现只有对应部门的对应人员才能对本部门的代码仓库具有特定的操作权限。
此外,还可以对项目进行一些配置,比如禁止某些特定文件被推送到仓库(比如 zip、pdf、war 等),限制被推送到仓库的文件大小(比如 1M 以上的无法被推送),这些能够有效防止代码仓库爆仓,也便于仓库的持续维护。
极狐GitLab 还具备高可用架构,针对不同规模的组织,可以用不同的高可用架构进行安装配置,以满足数百人、上千人乃至上万人的协作,不会因为随着人员的扩大导致平台使用效率与体验变差。同时,为了解决跨地域(尤其是跨国)团队之间的高效协作,极狐GitLab 特有的 GEO 架构,不仅能够让跨地域的团队感受到无差别的 Git 的相关操作体验(clone、pull、push 等),还能够实现数据的容灾备份。
此外,还可以借助极狐GitLab 灵活的分支管理,落地基于分支的研发模式,能够让多人基于同一套代码进行协作,尽量避免代码冲突、防止主干分支被阻塞等现象的发生,进一步提升了研发效率。
Code Review 是提升源代码质量,构建企业质量内建文化的重要手段。极狐GitLab 的 Code Review,可以为每个 MR 指派多个审核人员,而且可以将 CI/CD Pipeline 中的一些数据,比如代码规范扫描、测试报告、安全扫描等报告直接嵌入到 MR,给代码审核人员提供数据支撑,加快变更代码的审核,缩短 MR 的合并周期。同时还可以自定义一些代码准入规则来进一步提高代码准入门槛,比如代码覆盖率检查、安全准入、多人审批等。这些功能在保障代码质量的前提下,还大幅度提升了研发效率。
极狐GitLab 的便捷性也体现在以下几个方面:
极狐GitLab 提供 SaaS 和私有化部署,由于极狐GitLab 本身是开源开放的,所以其私有化部署不仅支持多种安装方式,诸如安装包、容器镜像,云原生等,而且每一种方式都非常简单,几乎是“一键式”安装,整个过程无需联系极狐GitLab 团队,即可在官网上自行获取对应的安装包、容器镜像、Helm Chart 或 Operator 等,根据自身情况在数分钟之内构建起一个可用的极狐GitLab 实例。而这种简单的安装方式,也是极狐GitLab 收获大量用户的关键要素之一。
极狐GitLab 是一个标准化的产品,产品里面没有晦涩难懂的功能特性,任何级别的用户都可以快速上手想用的功能特性,如果对于某些功能特性的使用存疑,可以直接查阅详情的官方文档来进行学习实践。
如果想从其他类似产品进行迁移,官方也提供了很多迁移教程,只需简单几步就能完成代码仓库的迁移。
极狐GitLab 具有丰富的 API 功能,而且都是开源开放的,每一个 API 的使用都有详细的文档进行描述。用户可以基于开放的 API 将极狐GitLab 与其他工具集成,打造更为丰富的生态,进一步提升软件研发效率(比如集成 Jenkins 来实现 CI/CD,集成 Slack 来实现 ChatOps 等)。更重要的是,用户可以利用这些 API 来构建一些新的应用程序(比如抓取一些代码提交的数据进行分析之后为研发效率的提升做数据支撑,比如和一些 IM 工具集成,打造 ChatOps,实现工作流的自动化等),让创新变得简单。
当然,极狐GitLab 发展到现在已经不仅仅是一个源代码托管平台,而是围绕源代码平台延伸出了项目管理、CI/CD、DevSecOps、ChatOps、GitOps 等功能,这些开箱即用的功能不仅大大简化了用户对于工具链的安装运维,节约了大量的时间和人力成本,而且将源代码的价值最大化,从用户侧,极大地提升了研发效率,加速了软件的发布;从用户(或客户)侧,更快的看到了产品的价值,实现了双赢。