- 代码仓库:目前主要是GIT为主,可自建,也可用公有的github、码云等;自建的话可选择gitlab、gitea等,gitlab资源消耗较高,而且维护成本比较大,但有点就是功能齐全,用得上的用不上的都有,原生支持CI等;gitea就是一个使用go开发的轻量级git服务器,目前看来只能用于代码管理,但是可以与很多第三方软件集成,比较适合小公司或个人使用。
- 流水线:使用比较广泛的是jenkins, 虽然很多新出现的CI软件号称要将jenkins扔进垃圾堆,但是目前看来还差些火候。但终究因为jenkins是使用java开发的,有着资源占用高的通病,在一些服务器资源较为紧张的情况下还是有些水土不服;当然还有另外一些选择,比如我用的Drone, 服务器端比较小,资源占用不高,而且与gitea集成的比较好。Drone是分服务端和runner的, runner可以部署在任意设备上,只要能访问drone服务端即可,比如我经常在开发机上部署一个runner。
- 质量检测:比如著名的sonar,checkstyle等,这些可以作为在流水线的一部分,也可以在代码推送前进行检测,以java开发为例,如果使用gradle作为构建工具,可以在gradle中调用githook,然后进行代码扫描、单元测试等。
- 依赖管理:软件开发过程中必然会使用大量的第三方依赖,虽然绝大多数都可在互联网上获取,但是由于网速等不可控的原因,可能会影响到开发效率,因此可以在内网中部署一个私服,比如nexus、Artifactory等,这些程序可以将第三方依赖缓存至内网,加速开发时依赖获取。
- 制品管理:上述的依赖管理软件一般来说就可以作为制品管理程序,另外我发现gitea也可以进行制品管理。对于docker的还有可以使用其官方的registry。
- 服务编排:这里说的主要是现在基于容器开发的web服务,现在使用较多的是k8s、docker-compose等,对应也有些可视化的管理系统,比如portainer,rancher等。
- 虚拟化软件:最出名的莫过于esxi了,资源占用少,虚拟机性能接近物理机等,但是作为商业软件,价格还是有点贵。但是也还是能找到功能接近的开源软件。
- 监控程序:比如zabbix、grafana等,方便异常报警、查看资源使用情况、分析问题等。
- 文件存储:minio、openstack等, 既可以用于团队内部文件分享、资产积累,也可用于各种服务的非结构化数据储存。
- 统一日志管理:ELK,主要是问题溯源。
- 配置管理:如nacos、console等,可以对配置进行统一管理,动态更新等。
- 项目管理工具:禅道、scrum、看板等,主要管理项目开发流程,模式等。