为了自动化部署过程,CI/CD需要上下文:部署配置、构建配置、工件、版本号、依赖关系、环境变量、测试结果等。这些数据并不存在于一个地方——它通常分散在多个系统和工具中。
例如,部署配置可能存储在一个单独的YAML文件中,环境变量可能在脚本或部署清单中定义,版本号可能在电子表格中手动跟踪。
太多的事实来源可能会导致几个问题,包括复杂性增加、元数据不一致、难以更新数据,最重要的是,无法应用自动化。作为内部开发人员门户网站的核心,软件目录可以提供一个解决方案。
第一步:可以存储CI/CD数据的软件目录
第一步是创建一个包含正确数据的软件目录。它应该是一个通用软件目录,允许添加具有不同资产和关系的数据类型,提供灵活性,使每个人都可以将自己的数据模型添加到目录中。
内部开发人员门户是平台工程的核心。它向开发人员提供了作为平台一部分构建的自助服务操作,还提供了软件目录。
这就是它变得有趣的地方。从开发人员的经验来看,软件目录可以解释为一个经过编辑的白名单数据存储,旨在帮助开发人员克服认知负荷。
但这并不是故事的全部。实际上,使用CI/CD的软件目录是非常强大的。软件目录可以存储有关构建、环境、云等的数据。这种类型的软件目录对于为CI/CD上下文创建一个单一的事实来源是非常有益的。
平台工程团队正在积极实现这些好处,尤其是在CI/CD元数据方面。他们使用软件目录作为CI/CD事实的单一来源,并且还使用软件目录中的CI/CD数据作为其自动化工作流的一部分。
通过在软件目录中包含有关集群、环境、云区域和供应商的相关数据,CI/CD过程可以更加智能和自动化,从而实现更好的工程。它将CI/CD与所需的上下文数据解耦,分离控件,并使故障和管道破裂的故障排除更加容易。
通过开发人员门户,这些功能还帮助平台工程团队为开发人员提供更好的部署过程可见性,因为他们可以实时查看部署状态和发生的任何错误。
下一步:版本控制和安全
一旦建立了软件目录,当CI/CD数据还用于版本控制和安全性时,它的单个事实来源的好处就可以得到进一步的发挥。
跟踪对元数据和配置文件所做的所有更改可以提高元数据随时间变化的可跟踪性。这对于审计目的和理解部署过程的演变非常有用。
此外,它还推动了更好的协作(通过版本和更改跟踪)、更快的问题解决以及快速恢复到以前版本的能力,并提高了合规性。当CI/CD数据是碎片化的时,这很难做到,但使用软件目录要容易得多。
软件目录通常确保只有授权用户才能访问和修改元数据,从而降低未经授权访问、数据泄露和其他安全事件的风险。例如,导致S3存储桶公开或将具有个人身份信息的服务暴露在互联网上的错误配置。
工作原理
软件目录本质上是一个集中的数据库,存储与CI/CD过程相关的所有元数据。它可以通过RESTAPI进行访问和修改,RESTAPI使CI/CD管道能够以编程方式与元数据存储进行交互。数据类型、资产和关系可以在需要时轻松添加,因为不同的组织执行DevOp的方式不同。
应该访问和存储哪些数据?这取决于我们所称的数据模型,即管道中重要的资产和类别。例如:
你可以按不同的类别组织目录,每个类别都包含与CI/CD过程的特定方面相关的元数据。例如,可能有一个用于部署配置的类别、一个用于环境变量的类别和一个用于版本控制的类别。
在每个类别中,都会有不同的元数据项或关键字。例如,在部署配置类别中,可能存在部署目标、部署策略和部署版本的元数据项。
CI/CD管道可以通过使用RESTAPI与元数据存储交互,指定要访问的类别和元数据项。例如,为了检索特定应用程序的部署目标,CI/CD管道可能会向部署配置类别发送GET请求,指定部署目标的元数据项。
图形数据库对软件目录的重要性
图形数据库对于软件目录来说很方便。由于软件目录中的不同实体具有复杂的关系(例如,服务部署在云账户中K8s集群中的命名空间上),并且这些关系很重要,因此需要能够方便地查询它们。图形数据库可以做到这一点。这在CI/CD管道的上下文中特别有用,因为开发人员、DevOps和机器需要能够快速访问有关系统不同部分如何相关的信息。
假设我们想要识别使用特定镜像版本的所有服务。如果没有元数据存储,需要手动搜索各种服务的配置和文档,以找到匹配的配置和文件。但是使用图形数据库,我们可以为每个服务创建节点,并将它们链接到它们使用的镜像版本。这使我们能够快速查询图表,找到使用所需镜像版本的所有服务。我们可以从查询镜像版本节点开始,然后遍历它与服务节点的关系。我们甚至可以向节点添加其他信息,例如服务运行的环境、上次更新的日期以及任何相关的警报或问题。这提供了整个系统的全面视图,并使我们能够轻松跟踪和管理服务。
假设我们想识别在特定地区运行的所有服务(例如,如果正在运维一个大型云平台,为不同地区的客户提供服务)。如果没有图形数据库,我们将需要在不同的数据源上执行多个查询,并尝试将信息拼凑在一起。然而,对于图形数据库,我们可以在一个查询中完成。
这种原生查询复杂关系的能力对于使开发人员和机器能够更有效地执行影响分析、管理配置、运行连续测试和管理发布至关重要。这不仅简化了CI/CD过程,还有助于确保系统的整体稳定性和可靠性。
软件目录必须API优先
现在我们需要考虑如何轻松地将数据导入软件目录。轻松地将数据摄入软件目录需要API优先的方法。这包括来自云提供商、Kubernetes(用于集群数据)、git提供商、基础设施即代码(IaC)工具(如Terraform或Crossplane)等的数据。
API优先的方法还可以轻松地构建与其他工具和系统的集成,例如创建一个包含有关基础设施和应用程序信息的仪表板。这可以帮助构建一个更全面、更有用的元数据存储,从而提供基础设施和应用程序的整体视图。
结论
平台工程和用作开发人员核心界面的内部开发人员门户的兴起,也为创建一个不仅对开发人员有用的软件目录提供了机会。具有CI/CD元数据的软件目录可以创建单一的事实来源,解决版本和安全问题,并允许部署过程的自动化等。