您描述的代码和配置的当前组织由所涉及的技术解决方案构成。这是一个糟糕的设计,将在我们的维护活动中增加很多开销,并且也会以我们的方式增加很多陷阱。相反,该组织应该围绕我们正在部署的工件进行组织。
这样做的原因是我们希望将人工制品(例如 docker映像或软件包)视为以下动词的对象:
考虑我们要执行的最少自动化任务集。如果我们要更改测试动词的实现方式,则可以在适当的存储库中轻松访问与该工件对应的文件夹,然后发现需要更新的特定于詹金斯的自动化项目。相反,如果自动化配方是围绕技术解决方案构建的,那么我们需要立即弄清詹金斯参与了测试程序,并在此处找到了与工件相关的自动化项目。在复杂的情况下,围绕技术解决方案的组织很难进行更新,因为我们必须事先了解某些服务中涉及的所有技术解决方案才能进行相应的更新。
例如,包含网站代码和微服务“ a”的存储库可以具有以下专用于操作的子目录:
./ops/website
./ops/micro-service-a
分别具有三个脚本调用build
,test
和deploy
。既然自动化项目的组织方式已经阐明,那么让我们将注意力转移到配置上。
有关配置组织的主要条件和要求由deploy
动词应用于类似服务的人工制品时设置。该deploy
动词应具有以下参数:
- 要部署的人工制品的版本,
- 工件的部署目标,它描述了部署的工件将在其中运行的具体环境(例如,集群和应该与之通信的端点)
- 连接到其他端点(例如数据库)时应使用的凭据
- 的运行时配置(例如高速缓存条目应保留多长时间等)
从操作的角度来看,此参数的细分与部署问题的自然自由度相匹配-除了可以与运行时配置捆绑在一起的凭据外,但最好将它们分开,以免不慎分散它们。