首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基础设施作为代码和TDD

基础设施作为代码和TDD
EN

DevOps用户
提问于 2017-12-04 12:05:17
回答 4查看 904关注 0票数 11

代码告诉我们使用自动化构建的工具。太棒了。可抗大厨木偶盐堆等工具促使我们编写基础设施的样子,同时解决这些差异。

在盐堆中,这些比特被称为。如果国家不符合现实,这个工具将为我们解决这个问题。换句话说,我们正在为我们的基础设施编写一个测试,如果测试失败,这个工具将自行修复它。至少这是个主意。

XP教我们如何使用TDD,问题是它是否适用于基础设施?工具表明它是。

我可以想象有几种测试是非常有用的。

我们编写与部署的服务捆绑在一起的烟雾测试,以确保部署的服务端到端工作并按预期运行。这将是一个API调用或/和systemctl检查,以确保我们刚刚部署的工作。许多这种功能可以在相同的状态中覆盖,因为像ansible这样的工具有状态来确保服务正在运行。

有一个项目分子允许针对docker或其他临时虚拟化引擎运行单独的角色 (如ansible所称的状态)。这迫使角色解耦,并允许在处理角色时将它们与剧本隔离执行。测试主要允许模拟角色应该使用的变量。其他示例似乎是ansible引擎的复制(断言一个文件属于一个用户.)。

ThoughtWorks技术雷达现在赞扬像inspecserverspec戈斯这样的工具来验证服务器是否符合规范。但我们正在写一份说明书,不是吗?

那么,如果我们描述的是状态/角色中的基础设施,那么进一步测试基础结构是否有意义?我可能怀疑,在一个团队提供规范和其他功能的大型组织中,这变得更有必要,或者如果有大量的角色,也许您希望运行其中的一个子集,并从测试中获得快速的好处?我很难理解为什么你会写一个测试,如果你可以有一个角色/状态为相同的问题在头脑中。

EN

回答 4

DevOps用户

回答已采纳

发布于 2017-12-04 18:29:00

简而言之,我看到了基础结构的两类测试: 1)它是否具备运行应用程序所需的一切;2)它没有任何多余的东西。

首先,您可以将实际软件的测试套件作为基础结构的一种“元测试”。只要您为每次测试运行从头创建基础设施,并且测试套件完全在该基础结构上运行(即,不使用外部服务),整个套件都是绿色的,这意味着您的编码基础设施也足够了。

其次,特别是从安全性的角度来看,您可以针对您的基础结构编写测试。也就是说,如果基础设施的一部分是运行Linux的VM,您可以编写一个测试,对该VM进行端口扫描,以确保没有意外打开的端口,这些端口可能是由意外的apt-get install副作用安装的。或者,您可以编写测试,以检查在适当的测试套件完成后是否更改了任何意外的文件。或者,您可以检查VM或Docker容器的ps输出,以查找意外的进程,构建白名单等,从而获得自动通知,如果某个第三方包在某些升级过程中以未记录(或未被注意到的方式)更改。

这些第二种类型的测试在某种程度上类似于您在经典操作设置中所做的工作,即加强服务器和检查入侵,避免完全重新源等等。

票数 6
EN

DevOps用户

发布于 2018-02-27 14:25:46

看起来这里的每个人都假设IAC工具总是按预期运行,但我可以(根据我自己的经验)判断,情况并不总是这样,否则单元测试实际上是无用的。

我记得一张照片上写着“无敌的游戏,一切都很好”,背景是一座建筑被烧毁……

从我的观点和经验来看,运行声明状态和让服务器处于这个实际声明状态是两件不同的事情。

一个广泛的、异构的环境,跨越多个DC,可通过公共网络等进行访问。无法完全或部分应用状态的原因有多个。

由于所有这些原因,单元测试有空间允许获取实际服务器状态的快照,这可能与目标状态不同。

所以我会说是的,即使在IAC管理的环境中,单元测试也很有用。

编辑

那么IaC代码基的dev分支的非回归部分呢?因此,您会在dev分支中对代码进行更改,并将其合并到prod分支,希望不会破坏所有内容?单元测试是非常有价值的,而且通常实现起来很简单,我不明白为什么没有这个特性就会编写代码。

参考资料(法语对不起):https://fr.slideshare.net/logilab/testinfra-pyconfr-2017

票数 2
EN

DevOps用户

发布于 2017-12-04 16:15:27

为完全由IaaC状态规范覆盖的项编写TDD测试是相当多余的。这样做意味着IaaC的有效性是值得怀疑的--如果是的话,为什么要使用它呢?

从不同的角度来看,IaaC本身(如果/如果做得适当的话)集成了已经经过测试并被认为运行可靠的功能。这使得它具有吸引力,也使得编写TDD匹配测试变得多余。

例如,指定安装了SSH的系统的IaaC配置已经包含了可靠的SSH正确安装检查,如果没有正确安装,则包含正确安装SSH的机制。这使得一个TDD测试来检查SSH是否是多余的。如果您的IaaC配置还指定要启动sshd并侦听特定端口,那么运行和侦听相应端口的TDD测试也将是多余的。

请注意,我的回答不是针对TDD或检查您的IaaC配置作为一个整体是否符合特定目的的任何其他类型的测试。这仍然有效,可以在开发IaaC规范期间用于TDD、CI或类似的检查--我相信@AnoE的答案在这种情况下是适用的。

票数 1
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/2777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档