代码的生命周期
- 产生需求
涉及到需求管理 - 开发人员编码
涉及到代码仓库, 多人协作等 - 代码测试
这个步骤的测试一般只是简单的基础校验;
如语法规范, 注释格式, 提交信息, 依赖验证, 单元测试等 - 打包
产出交付物 - 测试环境验证
功能测试,性能测试, 灰度测试等 - 生产环境部署
可能会回滚
需要考虑的几个组件
- 代码仓库
- 代码编译
- 包管理
- 测试
- 部署管理
代码仓库
如果没有特殊需要, 一般也都是 git 管理了, git 的仓库可以考虑这几个
优点 | 缺点 | |
---|---|---|
github | 不需要介绍 | 国内访问存在不确定性 |
gitee | 就是国内访问质量好 | 缺点就是可信度不高 |
gogs | 如果只是单纯的 git 仓库, 这个就行了,轻量简单。可以私有化部署 | 功能单一 |
gitlab | 可以私有化部署, 企业集成度比较高, 功能丰富 | 太重, 集成了太多杂乱的组件, 复杂 |
gitea | 个人是强烈推荐,既轻量,又功能丰富, 支持软件包管理, runner 等组件 | 没有明显感觉 |
onedev | 最近刚发现,感觉很不错,国产项目,似乎可以平替gitlab | 未知 |
CI
CI工具非常多, 但一般主要考虑这几款
产品 | 介绍 |
---|---|
github-actions | 如果代码是在 github 上,当然是首选了; 有一定免费额度可以用, 小项目足够了 |
gitlib-ci | 如果代码是在 gitlib 上,当然也是首选了 |
gitea-runner | 如果代码在 gitea 上也是首选, 基本兼容 github-actions 的语法和插件。 但是这个项目的问题就是太新了,gitea 1.19 才开始正式支持, 也就是才发布几个月。 目前来说, 勉强可以用, 但稍微特殊一点的功能就不大能支持; 个人其实不大看好未来发展,因为开发进度的人员数量似乎有些不足,现在的进度也慢。 |
jenkins | 老牌集成工具, 我是实在不推荐使用了 |
drone | 主力推荐, 轻量级,插件都是容器化方式,定制功能非常方便。 虽然是开源的, 但也需要注意一点商业许可问题,轻量使用是免费的 |
Woodpecker | 因为 drone 的诡异的商业许可问题, 所以出现了开源平替。 基本兼容 drone, 推荐,个人非常看好 |
还有一些云厂商的, 比如阿里的云效等, 没用过,但如果深度使用他们平台的话,应该也是挺不错的。
CD
最早就是脚本推送重启了
然后就是 ansible 这一类集中管理工具
再然后就是 k8s 集群这类平台化容器管理方式
目前比较看好和推荐 Argo 来做 持续部署
包管理
以前有过的方式
- 交付 war,jar, tar.gz 等形式的包文件,找一个文件目录或ftp进行存放
- 研发推送到统一的包仓库,如 npm 仓库, yum 仓库, mavn 仓库,pipy 等等
- 提交一个 release 到 github 或 gitea 或 gitlib 中
推荐的方式
如果不是最终交付的成品, 如果依赖库这种, 建议就是语言自身的私服中和 git release 两种方式组合管理
如果是最终交付物, 还是推荐 git release 方式和 ftp 类进行管理