掲題の通り、Chef で環境を構築してそのままアプリをデプロイしたい時の設定です。
Tomcat 前提ですが、Tomcat のインストール部分は省略してます。また、ここでは root ユーザでやってますが、適切なユーザを作成してファイル・ディレクトリの権限を付与した方がいいです。
Chef の git resource を使って bitbucket から clone
git "/tmp/app" do repository "git@bitbucket.org:my-repository/my-app.git" ssh_wrapper "/root/.ssh/ssh4bitbucket.sh" end
プライベートリポジトリだと Permission denied とか言われるはずなので、公開鍵認証を使用します。 鍵の作り方等は以下を参照してください。
git で ssh 使うために秘密鍵を配置
files/default に秘密鍵を置き、 Bitbucket には公開鍵を登録しておきます。
directory "/root/.ssh" do action :create mode "700" end cookbook_file "/root/.ssh/id_rsa" do source "id_rsa" mode "600" end
directory — Chef Docs cookbook_file — Chef Docs
git resource で使用する ssh_wrapper を配置
ssh_wrapper では以下の2点を指定してます。
file "/root/.ssh/ssh4bitbucket.sh" do mode "700" content <<-EOL #!/bin/bash ssh -i /root/.ssh/id_rsa -o "StrictHostKeyChecking=no" "$@" EOL end
war ファイルを作成して配置
Maven プロジェクトを前提としています。
適切な resource や Cookbook が見つからなかったので、Shell でやります。
script "complie source code and set war file" do interpreter "bash" user "root" code <<-EOL cd /tmp/app mvn install mvn package chown root:tomcat target/app.war mv -f target/app.war /usr/share/tomcat/webapp/app.war EOL end
まとめ
以上です。
ちなみに deploy という resource もChef には有るのですが、migrate のフェーズはあるものの、ビルドするタイミングがなかったので使用してません。ビルドの必要のない言語とかだとこの deploy を使ったほうがスッキリかけるかもしれません。