问题描述
我正在尝试运行这个
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
资源。
有人可以帮我解决这个问题吗?
终端输出:
[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 文档中阅读更多内容