当说明书具有依赖项时,Chef Workflow 在验证阶段失败

Chef Workflow fails on Verify stage when cookbook has dependencies

我正在使用 Chef Automate 的工作流部分将食谱传送到我的 Chef 服务器。我已经通过管道在 Chef 服务器上成功上传了 2 本食谱。

在 Chef 服务器上:
apache 版本为 0.2.3
another_test 版本为 0.1.1

我想对 apache 进行更改以依赖于 another_test,因此我更新了 apache 的元数据并将版本提升到 0.2.4

apache 的元数据文件有 depends 'another_test' another_test 没有依赖项。

apache 的 Berksfile 是

source :chef_server
source 'https://supermarket.chef.io'
metadata

当我拨打交付审查电话时,管道启动但我在验证阶段的单元测试阶段失败。

execute[unit_rspec_apache] action run

================================================================================
Error executing action `run` on resource 'execute[unit_rspec_apache]' ================================================================================
Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of rspec --format documentation --color ----
STDOUT: [2017-11-21T14:06:57+00:00] ERROR: Connection refused connecting to https://localhost/universe, retry 1/5
[2017-11-21T14:07:02+00:00] ERROR: Connection refused connecting to https://localhost/universe, retry 2/5
[2017-11-21T14:07:07+00:00] ERROR: Connection refused connecting to https://localhost/universe, retry 3/5
[2017-11-21T14:07:12+00:00] ERROR: Connection refused connecting to https://localhost/universe, retry 4/5
[2017-11-21T14:07:17+00:00] ERROR: Connection refused connecting to https://localhost/universe, retry 5/5

An error occurred in a `before(:suite)` hook. Failure/Error: raise NoSolutionError.new(demands, e)

Berkshelf::NoSolutionError: Unable to satisfy constraints on package another_test, which does not exist, due to solution constraint (apache = 0.2.4). Solution constraints that may result in a constraint on another_test: [(apache = 0.2.4) -> (another_test >= 0.0.0)]
Missing artifacts: another_test
Demand that cannot be met: (apache = 0.2.4)
Unable to find a solution for demands: apache (0.2.4)

由于这次失败,新版本的 apache 0.2.4 从未上传到 Chef 服务器。

编辑: 我已经使用超市的依赖形式进行了测试,它通过了验证阶段。所以我在 apache 中有 depends 'java' 并且可以正常上传。当我依赖来自我的厨师服务器的食谱时,问题就开始了。

编辑 2: 我可以登录运行器并执行 knife cookbook list。这向我证明跑步者可以访问厨师服务器并查看那里存在哪些食谱。我还尝试将 apache 的 Berksfile 更改为 source 'https://<full-url-to-chef-server/organizations/myorg' 代替 source :chef_server

我不得不编辑运行器节点上的 /var/opt/delivery/workspace/.chef/knife.rb 文件。我在文件底部添加了这一行:chef_server_url 'https://chef-server/organizations/myorg'.

这个knife配置文件被runner节点上的dbuild用户使用。它读取此文件以确定厨师服务器的 URL。