我对厨师食谱有一个奇怪的问题。让我告诉你,我是 Chef 的新手,如果看起来很不对劲,请原谅我。
我有我的战争文件,它是由 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
execute
在命令被触发之前,war 文件和相关的配置文件夹及其内容已成功复制到各自的目的地。问题是当机器用 新创建时kitchen create
,第一个kitchen verify
会失败,说'Errno::ENOENT: No such file or directory - java -jar /opt/com/app.war -config=config/'
. 这只是第一次发生。出乎意料的是,再说kitchen verify
一遍,应用程序启动了,并成功运行。
这很奇怪,因为所需的文件 app.war 和 config/ 已经 [或应该] 存在于具有适当权限的机器中。
我知道 Chef 按顺序处理这些事情,所以鉴于执行命令是我配方中的最后一行,它应该已经具备运行 war 文件所需的内容。我要疯了,谁能提供一些关于这个的见解?
谢谢!