Chef solo can't find cookbook during kitchen test run

匿名 (未验证) 提交于 2019-12-03 01:26:01

问题:

I'm trying to add a Test Kitchen for a bunch of cookbooks that we use to provision a Jenkins CI instance.

We use Berkshelf to manage dependencies. The file structure is as follows:

|   .gitignore |   .kitchen.yml |   Berksfile |   Berksfile.lock |   bootstrap.sh |   chefignore |   metadata.rb |   provision.sh |   readme.md |   solo.json |   solo.rb |   tree.txt |   VERSION |    +---.kitchen |   |   default-ubuntu-1404.yml |   |    |   +---kitchen-vagrant |   |   \---kitchen-chef-jenkins-default-ubuntu-1404 |   |       |   Vagrantfile |   |       |    |   |       \---.vagrant |   |           \---machines |   |               \---default |   |                   \---virtualbox |   |                           action_set_name |   |                           id |   |                           index_uuid |   |                           private_key |   |                           synced_folders |   |                            |   \---logs |           default-centos-71.log |           default-ubuntu-1404.log |           kitchen.log |            +---site-cookbooks |   +---ant |   |   |   .gitignore |   |   |   .kitchen.yml |   |   |   Berksfile |   |   |   CHANGELOG.md |   |   |   chefignore |   |   |   CONTRIBUTING.md |   |   |   LICENSE |   |   |   metadata.rb |   |   |   README.md |   |   |   TESTING.md |   |   |   Thorfile |   |   |    |   |   +---attributes |   |   |       default.rb |   |   |        |   |   +---providers |   |   |       library.rb |   |   |        |   |   +---recipes |   |   |       default.rb |   |   |       install_package.rb |   |   |       install_source.rb |   |   |        |   |   +---resources |   |   |       library.rb |   |   |        |   |   \---templates |   |       \---default |   |               ant_home.sh.erb |   |                |   +---haxe_cookbook |   |   |   CHANGELOG.md |   |   |   metadata.rb |   |   |   README.md |   |   |    |   |   \---recipes |   |           default.rb |   |            |   \---mbp-jenkins |       |   Berksfile |       |   Berksfile.lock |       |   CHANGELOG.md |       |   chefignore |       |   metadata.rb |       |   README.md |       |    |       +---recipes |       |       default.rb |       |        |       +---resources |       |   |   commons-net-3.3.jar |       |   |    |       |   +---css |       |   |       style.css |       |   |        |       |   +---images |       |   |       logo-mbp.png |       |   |       web.png |       |   |        |       |   \---js |       |           scripts.js |       |            |       \---templates |           +---default |           |   |   config.xml |           |   |    |           |   \---secrets |           |           hudson.console.AnnotatedLargeText.consoleAnnotator |           |           hudson.model.Job.serverCookie |           |           hudson.util.Secret |           |           jenkins.security.ApiTokenProperty.seed |           |           jenkins.slaves.JnlpSlaveAgentProtocol.secret |           |           master.key |           |           org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices.mac |           |           org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY |           |            |           \---emails |                   build-complete.html.groovy |                   build-started.html.groovy |                    \---test     \---integration         \---default 

Executing:

kitchen converge default-ubuntu-1404 

Results in the following error:

    [2015-08-24T09:13:24+00:00] ERROR: Cookbook mbp-jenkins not found. If you're loading mbp-jenkins from another cookbook, make sure you configure the dependency in your metadata [2015-08-24T09:13:24+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) 

Which suggests that chef-solo can't find the cookbook mbp-jenkins. I would expect it to find it though as we define the cookbook paths in the solo.rb file as follows:

root = File.absolute_path(File.dirname(__FILE__))  file_cache_path 'cache' cookbook_path [root + "/cookbooks", root + "/site-cookbooks",root + "/berks-cookbooks"] 

Not really sure what is going wrong here so any suggestions would be appreciated

Update:

I have tried using the chef zero provisioner, that however gives me the output:

================================================================================ Error Resolving Cookbooks for Run List: ================================================================================  Missing Cookbooks: ------------------ No such cookbook: mbp-jenkins  Expanded Run List: ------------------ * mbp-jenkins::default 

回答1:

Have you tried using the chef_zero provisioner instead? I suspect your problem is because chef solo does not run Berkshelf, which would explain the missing cookbooks.

For example see:

How to customise a tomcat recipe in Chef

Update

The issue appears to be that the cookbooks in the site-cookbooks directory is not be copied over to the target machine.

Seems to me the simplest and best fix is to include the local cookbooks in your Berksfile as follows:

source 'https://supermarket.chef.io'  cookbook 'ant',           path: 'site-cookbooks/ant' cookbook 'haxe_cookbook', path: 'site-cookbooks/haxe_cookbook' cookbook 'mbp-jenkins',   path: 'site-cookbooks/mbp-jenkins'  metadata 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!