0

シェフのレシピに奇妙な問題があります。私はChefを初めて使用するので、何かがひどく間違っているように見える場合はご容赦ください。

Spring Boot によってビルドされた war ファイルがあります。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 ファイルと関連する config フォルダーとその内容が、それぞれの宛先に正常にコピーされています。問題は、マシンが で新しく作成されたときに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 がこれらのことを順番に処理することはわかっているので、execute コマンドがレシピの最後の行であることを考えると、war ファイルを実行するために必要なものが既にあるはずです。私は頭がおかしくなっています、誰かがこれについての洞察を提供できますか?

ありがとうございました!

4

1 に答える 1

1

やや直感に反しますが、これはおそらくjava$PATH. これは、java がインストールされていないか、インストールされているが Chef が見つけられないことを意味している可能性があります。環境変数はプロセスの開始時にのみ継承されることに注意してください。そのため、Java をインストールした場合、インストーラーが Java にグローバルな変更を設定すると$PATH、Chef には表示されません。適切な修正は、JVM バイナリ (/opt/whatever/bin/javaまたは何か) へのフル パスを使用することです。

于 2015-06-28T05:16:25.823 に答える