可以的话测试一下。 YML开发人员是否梦想过测试?

厨房ci模式


它是圣彼得堡Linux用户组 的演示文稿 2018-04-25的文本版本。 配置示例位于https://github.com/ultral/ansible-role-testing


我想您是进行配置管理,而不是bash 。 这意味着您必须对其进行一些测试。 您是否曾经测试过角色? 你如何做?


怎么做?


就我而言,我们有:


  • 许多不同的角色。
  • Hyper-V充当虚拟机监控程序。
  • 具有按需创建VM的可能性有限的私有云。
  • 互联网访问的代理。
  • 由于角色=整个VM配置,因此无法在docker内部测试ansible角色。
  • 决定为具有角色的git仓库实施绿色构建策略。

让我们比较现有的解决方案进行测试。


名称测试厨房分子建立新的
语言能力红宝石蟒蛇重击/红宝石
观察者1321260
星星141311541个
前叉5021742
执照阿帕奇2.0麻省理工学院任何
提交1929年12640
发布1011210
贡献者109825

名称测试信息服务器规格检查高斯
Github菲尔普/ TestinfraMizzy / serverspec厨师/检查阿尔萨比/高斯
语言能力蟒蛇红宝石红宝石
观察者9314516567
星星997210511672170
前叉138361330156
执照阿帕奇2.0麻省理工学院阿帕奇2.0阿帕奇2.0
提交3801854年4609309
发布3528234647
贡献者4311015931

我们决定不重新发明轮子 ,而是准备好生产解决方案。 我们的基础架构团队拥有强大的红宝石技能和丰富的红宝石经验,因此我们选择了Test Kitcheninspec


奇奇


厨房ci模式


主要思想是创建一个新的VM,扮演一个角色并做一些冒烟测试。


绿色建筑政策


绿色建筑政策纲要


此外,我们实施了绿色建筑政策。 我们对每个提交到master分支的提交都运行了测试,如果可以,则在应用ansible角色时进行测试。


嵌套虚拟化


您还记得,我们有一个私有云,按需创建VM的可能性有限。 我们决定在VM内部创建VM。


我们需要更深入


首先,我们尝试在不嵌套的情况下运行Virtualbox x32。 由于内核崩溃,这是个坏主意。 同样,我们基础架构中的绝大多数VM都是x86_64,因此我们决定继续进行研究。 结果,我们决定使用嵌套虚拟化。 希望我们的主机服务器支持它。


面临的问题


我正在实施testkitchen,并遇到了一些问题。


将代理设置从主机传递到testkitchen来宾VM


在某些测试服中,我们在testkitchen创建的VM内配置了代理客户端设置。 但是,未在testkitchen主机上配置代理,并且ansible无法使用带有空值的额外变量


解决方案:如果未设置ENV变量,则创建erb模板以设置默认代理


<%= ENV['http_proxy'].to_s.empty? ? 'http://proxy.example.com:3128' : ENV['http_proxy'] %> 

通过剧本管理网络设置


一些角色配置网络接口。 测试服看起来像:


  • 将网络设置部署到虚拟机
  • 重新加载网络
  • 失败了

解决方案:向虚拟机添加接口


如果诉讼案件名称中包含“-”,则失败


Virtualbox不能在虚拟机名称中使用“ _”


解决方案:将手提箱重命名为“ vm_” =>“ vm-”


没有“。”的Oracle测试失败。 VM名称末尾


我们在生产中使用角色,但是当我们决定对其进行测试时,它就失败了。 我们复制了它。


我想显示线索。


 [root@vm-oracle vagrant]# getent ahosts vm-oracle 127.0.0.1 STREAM vm-oracle 127.0.0.1 DGRAM 127.0.0.1 RAW [root@vm-oracle vagrant]# getent ahosts vm-oracle. fe80::a00:27ff:febd:bd6a STREAM vm-oracle fe80::a00:27ff:febd:bd6a DGRAM fe80::a00:27ff:febd:bd6a RAW 10.0.2.15 STREAM 10.0.2.15 DGRAM 10.0.2.15 RAW [root@oracle vagrant]# getent ahosts oracle.example.com. 192.168.128.182 STREAM oracle.example.local 192.168.128.182 DGRAM 192.168.128.182 RAW 

您有什么想法吗?


这是一个棘手的错误:


  1. 我们仅在oracle监听器设置中启用了监听IPv4
  2. oracle使用FQDN
  3. linux包含用于解析主机名的特殊数据库“ myhostname”,它在/ etc / hosts和dns解析之后使用
  4. 游民创建了虚拟机并更新了/etc/hosts

我想进一步说明一下:
万一vm-oracle发生了什么事?


  1. 流浪汉创建虚拟机
  2. 流浪者更新了/etc/hostsvm-oracle x2)
  3. oracle监听器监听了IPv4
  4. oracle侦听器解决了vm-oracle。 并获得IPv6
  5. 失败

vm-oracle发生了什么情况


  1. 流浪汉创建虚拟机
  2. 流浪者更新了/ etc / hosts( vm-oraclevm-oracle。
  3. oracle监听器监听了IPv4
  4. oracle侦听器解决了vm-oracle。 并获得IPv4
  5. 好啦

OOM来了


OOM随机杀死了VM。 Testkitchen因奇怪的错误而失败。


解决方案:增加RAM


建造缓慢


工作缓慢


解决方案:


  • 打包机 。 带有常规任务的预制游民箱
  • 并发

结论


一方面,当前的实现可行,但另一方面,存在一些问题


  • 不是用户友好的。
  • 我们将红宝石和蟒蛇混合。
  • 没有权力检查。
  • 它工作缓慢。
  • 很难跟踪单个作业的日志。

结果,Molecular&docker可能是非常有趣的解决方案。


一些相关链接


Source: https://habr.com/ru/post/zh-CN436960/


All Articles