有效跟踪从开发人员到产品的配置更改


9

这个问题以Spring Boot服务为例,但是可以是任何技术。

假设以下内容:

  • 环境(dev / QA / prod)由不同的团队拥有。这意味着开发人员不能访问生产配置。
  • 配置(例如application.properties)是外部化的,即不是二进制文件的一部分
  • 相同的二进制文件/程序包(例如,service.jar)部署在每个环境中,并由自动部署控制

虽然对二进制工件(service.jar)的更改会自动传播到每个环境,但是对配置的更改仍需要手动干预,这不可避免地最终导致在每个环境中失去同步。

例如,假设开发团队在其环境中向application.properties添加了一些键值对。记录这些新密钥的最佳方法是什么,以便在操作团队中进行部署时,他们确切知道要添加哪些密钥,从而将启动新服务并由于缺少密钥而看到新服务失败的风险降到最低?

我知道将涉及手动步骤,但我想知道人们如何处理此问题并找到最有效的方法。


狡猾的答案:打破孤岛。创建跨部门的开发人员和操作人员团队(以及开发产品,UX,市场营销,质量检查等所需的任何其他人员),让您的团队负责开发,部署和支持产品,将所有配置检查到VCS中,可以自动部署到所有环境(是的,包括产品),并继续您的生活。
RubberDuck

在某些安全性受到主要限制的环境中,很难建立完整的跨职能团队。
Mathieu Fortin

我知道@MathieuFortin。这就是为什么我用“狡猾的答案”而不是回答来评论和开头。这是我理想的解决方案,但不幸的是,没有一个适合您的解决方案。
RubberDuck

Answers:


3

这主要是一个沟通问题,但是您可以通过一些简单的技术和组织措施来减少出错的可能性。首先,您应该为配置文件中的所有条目提供高质量的高质量文档,以及一些易于访问的示例或“默认”配置文件。该示例文件可以自动部署到每个环境,因为生产团队不打算直接对其进行更改。

接下来,对于每个新版本,提供一个变更日志,其中记录了重要的变更。可能会在缺少配置时使系统无法正常工作的配置更改始终非常重要,因此请确保信息在那里。

例如,假设开发团队在其环境中向application.properties添加了一些键值对。记录这些新密钥的最佳方法是什么,以便在运维团队中进行部署时,他们确切地知道要添加哪些密钥,从而将启动新服务并由于缺少密钥而看到新服务失败的风险降到最低?

降低失败风险的最佳方法是避免以需要新密钥的方式更改应用程序,因此,应用程序应尽可能与旧的配置文件向后兼容。通常,您的应用程序可以通过为新键提供内置的默认值(以防丢失)来以明智的方式运行。

但是,如果这不可能,则您的系统应该使产品团队尽可能容易地找出为什么缺少密钥时新服务无法启动的原因。应该有清晰的错误消息,准确告诉哪个文件中缺少哪个键,并且在必要时可以在哪里找到有关丢失键的信息,或者有关该键有意义条目的提示或示例。

如果配置复杂,并且格式更改会导致手动编辑容易出错的方式,则您可能还会考虑提供工具来编辑配置和移植到较新的版本。

例如,我正在使用Firefox Web浏览器,并且在每个新发行版(我会自动获得)中,都可以在“ about:config”页面上检查某些内容到本地配置中。这与“生产”环境中的配置相当。由于整个配置都严格保持向后兼容,因此我不必再为配置添加新的密钥,而只是因为有一个新版本的浏览器。对于这种情况,我想在那里进行更改(可能是一个新条目,而不是先前版本的一部分),我可以使用“工具/选项”菜单或“ about:config”页面,可以找到该条目以及一些内容。种类的文档。因此,我建议尝试以可比的方式实施您的系统。


0

在我曾经工作过的一个地方,他们有类似的问题。生产配置由构建团队控制,只有他们可以在代码存储库中访问它。每个人都可以看到dev,qa,test等配置。

在你的榜样,开发者在本地更新文件,签入到源代码控制,然后有人会要求构建团队做了新的“配置唯一的”建造一签出配置文件和部署他们,但没有重新编译或重新部署整个应用程序。

团队成员应在适当的时候为其他环境更新配置文件。当需要进行生产更新时,构建团队必须通过开发团队负责人的明确请求来更新文件,尽管通常该请求看起来就像是“将app.config文件从QA1复制到PROD”。诸如密码之类的敏感内容位于单独的配置文件中,同样,只有构建团队才能访问生产密码文件。不同之处在于,开发人员通常请求更改密码文件,因为它们没有生产密码。他们唯一要求构建团队进行更新的时间是在为新服务添加新密码时。即便如此,开发人员可能也不知道生产密码,他们只知道要添加到文件中的密钥(例如“ newService2.password”)。

詹金斯(Jenkins)是用来管理很多此类技术的技术。还有一个内部工具,用于通过Jenkins请求和计划构建。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.