一切皆代码!
从DevOps角度而言,软件开发过程中涉及的一切都可以用代码来表达
- 构建的应用程序
- 部署应用程序的基础设施
- 产品文档
代码
代码库
- SaaS: GitHub、GitLab、Bitbucket等
- 云提供商提供代码库
- 私有的内部代码库
源代码管理
- 源代码的历史版本存放在不同的档案中:分类的压缩包,提供下载
- 签入和签出的集中式源代码管理:修订控制系统(RCS)、源代码控制系统(SCCS)
- 集中式存储:提交之前需要合并,并发版本系统(CVS)、Subversion
- 去中心化存储:分布式版本管理系统(DVCS),例如Git
分布式版本管理系统
- 能够离线进行版本话管理
- 能够独立工作
- 可以同时和多个远程环境协同工作,避免单点故障
Git服务器
- 安装并配置:启用SSH
- 共享认证: LDAP或者SSO
- 与其他系统集成
- GitHub或GitLab是学习探索Git的捷径
客户端
- 不强制使用特定的客户端, 根据需要和喜好自行选择
- 推荐使用SSH命令行,简洁方便
- 编写并维护一份简单的使用说明,便于了解与熟悉
源代码管理系统迁移
- 在新旧系统迁移时,保持了历史记录完整性很重要,也很费时间和精力
- 对于VSS(Visual SourceSafe)和ClearCase,迁移成本巨大,建议保留旧系统在线
- 对于Subversion等,当前有合适的方式,不会牺牲历史记录
分支策略
- 需要遵守的约定或规则,描述应该何时创建分支、如何命名、分支应该如何使用等
- 分支策略:Gitflow模型,所有的发行版都从唯一的主干分支生成
代码审查
- 代码审查功能:pull request
- 基于Git的代码审查工具:Gerrit
文档
文档管理与访问,信息分享与获取
理想的情况是让所有角色都可以轻松访问文档。
文档应当集中式存放,除了分类排序建索引之外,还应该能够进行版本化管理。
例如,可以将所有文档以wiki或文本的形式存放在git仓库。
制品
制品版本命名
- 语义化版本:http://semver.org
- 所有可安装部署的制品都有一个合适的发布号和一个在代码库中相对应的标签
- 有些编译工具支持快照发布号,例如maven