Chef 执行第一次失败

Chef execute fails for the first time

我对厨师食谱有一个奇怪的问题。让我告诉你,我是 Chef 的新手,所以如果有什么地方看起来很不对,请原谅我。

我有我的 war 文件,它是由 Spring Boot 构建的。我只需要 运行 java -jar <file>.war -config=config/ 到 运行 我的应用程序。

我最近开始尝试使用 Chef,并着手编写完成这项工作的食谱。

我食谱中的代码如下:

#Some code has been omitted intentionally.

directory "#{home}" do
  owner 'root'
  group 'root'
  mode '0755'
  recursive true
end

directory "#{home}/config" do
  owner 'root'
  group 'root'
  mode '0755'
end
cookbook_file "#{home}/config/ehcache.xml" do
  source "ehcache.xml"
  mode "0644"
end
# Get the war file from the repo
remote_file "#{home}/app.war" do
   source "#{node['baseos']['files_repo_url']}/wars/app.war"
   owner 'root'
   group 'root'
   mode '0644'
end

execute 'Run the war file' do
  command "java -jar '#{home}/app.war' -config='#{home}/config/'"
  action :run
end

war 文件和相关的配置文件夹及其内容在 execute 命令被触发之前成功复制到各自的目的地。问题是当使用 kitchen create 重新创建机器时,第一个 kitchen verify 会失败,显示 'Errno::ENOENT: No such file or directory - java -jar /opt/com/app.war -config=config/'。 这只是第一次发生。意外的是,再说kitchen verify之后,app启动了,并且成功运行s.

这很奇怪,因为所需的文件 app.war 和配置/已经 [或应该] 已经存在于具有适当权限的机器中。

我知道 Chef 按顺序处理这些事情,因此鉴于执行命令是我食谱中的最后一行,它应该已经包含 运行 war 文件所需的内容。我要疯了,谁能提供一些对此的见解?

谢谢!

虽然这有点违反直觉,但这可能是因为您的 $PATH 上没有可用的 java。这可能意味着 java 未安装,或者已安装但 Chef 无法找到它。请记住,环境变量仅在进程启动时继承,因此如果您安装 Java 的方式使得安装程序对 $PATH 设置了一些全局更改,则 Chef 将看不到它。一个好的解决方法是使用 JVM 二进制文件的完整路径(/opt/whatever/bin/java 或其他)。