错误解决运行列表的食谱:缺少食谱:没有这样的食谱“docker” 问题分辨率

问题描述

我正在尝试运行这个

Berksfile

source 'https://supermarket.chef.io'
Metadata

Metadata.rb

name 'my_jenkins_cookbook'

depends 'git'
depends 'ruby_rbenv'
depends 'jenkins'
depends 'java'
depends 'docker'

version '0.0.2'

我也尝试过将所需的食谱放在本地,但它没有从 jenkins_job 食谱中找到 jenkins_job 资源。

有人可以帮我解决这个问题吗?

Image - is the error

终端输出

 [DEBUG] Running command 4-run-chef-solo
 [DEBUG] No test for command 4-run-chef-solo
 [ERROR] Command 4-run-chef-solo (chef-solo -c /tmp/chef/solo.rb -j /tmp/chef/jenkins.json) Failed
 [DEBUG] Command 4-run-chef-solo output: Starting Chef Infra Client,version 17.0.242
Patents: https://www.chef.io/patents
resolving cookbooks for run list: ["my_jenkins_cookbook::jenkins_jobs","my_jenkins_cookbook::jenkins_views","my_jenkins_cookbook::setup_jenkins_users"]

============================================================
Error Resolving Cookbooks for Run List:
============================================================

Missing Cookbooks:
------------------
No such cookbook: docker

Expanded Run List:
------------------
* my_jenkins_cookbook::jenkins_jobs
* my_jenkins_cookbook::jenkins_views
* my_jenkins_cookbook::setup_jenkins_users

System Info:
------------
chef_version=17.0.242
platform=ubuntu
platform_version=18.04
ruby=ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
program_name=/usr/bin/chef-solo
executable=/opt/chef/bin/chef-solo

Running handlers:
 ERROR: Running exception handlers
Running handlers complete
 ERROR: Exception handlers complete
Chef Infra Client Failed. 0 resources updated in 26 seconds
 FATAL: Stacktrace dumped to /tmp/chef/local-mode-cache/cache/chef-stacktrace.out
 FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
 FATAL: Net::HTTPServerException: 412 "Precondition Failed"

解决方法

你是如何运行这个的?这是直接在带有厨师客户端的节点上还是通过测试厨房?

在我看来,就像您直接运行 Chef-solo 一样,但食谱尚未加载到服务器上。

,

问题

看起来像 chef-solo 执行找不到相关的说明书,如错误日志中所示。所以这里是解决问题的替代方法。

分辨率

chef-solo 的替代建议是使用 chef-client 选项运行 -z

Chef 客户端版本 11 及更高版本有一个名为 chef-client -z 的选项。它在 local mode 中称为 Chef 客户端执行。

这是在没有 Chef 服务器的情况下运行食谱的建议方法。

Chef-client 的 Chef 文档说明如下,

$ chef-client OPTION VALUE OPTION VALUE ...

-z,--local-mode
Run the chef-client in local mode. This allows all commands that work against the Chef server to also work against the local chef-repo.

本地模式不需要配置文件,而是看起来 对于名为 /cookbooks 的目录,并将 chef_repo_path 设置为 就在上面。 (本地模式将尊重设置 配置文件,如果需要。)

本地模式将临时和缓存文件存储在 <chef_repo_path>/.cache 目录默认。这允许正常 用户无需 root 即可在本地模式下运行厨师客户端 访问。

所以请按照以下说明操作,

  • 您需要使用您的食谱和其他内容创建一个项目存储库。
  • 项目仓库只不过是一个包含角色、数据包、食谱和环境的其他目录的目录
  • 在项目存储库中创建一个名为 cookbooks 的目录
  • 由于您的说明书中已经有 Berksfile,因此从每个说明书目录运行 berks vendor cookbooks 命令以提取所有相关说明书并将其存储在 cookbooks 目录中
  • 从项目存储库运行以下命令以在本地模式下调用 Chef 客户端。

chef-client -z -o 'provide_your_overridden_runlist'

  • 此步骤需要在Jenkins脚本部分执行

在 Chef 文档中阅读更多内容