我有一个旧的单一食谱库,旨在使用 Vagrant 创建一个完整的开发环境。我想根据最佳实践“重构”它。我想拆分大型食谱,制作社区食谱的适当包装食谱,并添加可由 Testkitchen 运行的 InSpec 测试,以检查所有内容是否按预期安装。
我决定从头开始,看看通过执行会创建什么骨架chef generate app some_name
。此命令生成以下文件集:
.
|-- .gitignore
|-- .kitchen.yml <----------
|-- README.md
|-- cookbooks
| `-- some_name
| |-- Berksfile
| |-- chefignore
| |-- metadata.rb
| |-- recipes
| | `-- default.rb
| `-- spec
| |-- spec_helper.rb
| `-- unit
| `-- recipes
| `-- default_spec.rb
`-- test
`-- smoke
`-- default
`-- default_test.rb
我注意到.kitchen.yml
在根目录中创建。由于现在建议为每本食谱创建单个 VCS 存储库,.kitchen.yml
在根目录中对我来说看起来有点奇怪。但另一方面,将用于测试我所有的说明书及其测试套件的 VM 配置保留在单个根文件中可能是一个好主意。
然后我决定检查我是否能够从 root 运行所有项目说明书的测试.kitchen.yml
。我制作了一个用于安装 Java 的简单包装食谱,其中包含depends 'java'
食谱metadata.rb
和准备好的 root .kitchen.yml
。
kitchen test
我从根本上面临的问题是社区食谱java
在厨房测试执行时没有得到解决。我试图添加Barksfile
到食谱目录中,但没有帮助(仍然未知java
的依赖关系)。看起来 Kitchen 仅适用于相对于.kitchen.yml
. 然后我尝试Berksfile
在项目根目录中添加,当然,它没有工作,因为它也在metadata.rb
根目录中搜索。
所以看起来.kitchen.yml
在项目根目录中为所有食谱设置一个单一的不是一个好主意。那为什么会生成呢?我也不喜欢我必须.kitchen.yml
在每本食谱的目录中编写几乎相同的内容,但看起来我别无选择,如果想从metadata.rb
.
如果您还可以建议我一个很好的示例 repo 来实现包装器/角色-cookbooks + 测试的最佳实践,那就太好了。我的项目很简单:它只是创建一些用户、准备环境并安装大量服务,主要使用包装好的社区食谱。我想将它保存在单个仓库中并使用 Kitchen + InSpec 进行测试