Vagrant と Puppet を用いた即時 Java プロビジョニング: Stash ワンクリックインストール

効率と生産性を最重要視する者として、繰り返し作業に一連の流れを作ったり、自動化することを常に心掛けています。したがって、プロビジョニング・フレームワークについての情報収集を開始する際、私のアンテナはすぐに受信を開始しました。それらをどんどん自分の開発ワークフローの中に組み入れ発展させていったのです。ここアトラシアンでデベロッパー・アドボケイトとして活躍する時に、これを利用する絶好のチャンスが訪れました。

Vagrant という言葉を聴いたことがありますか?こいつはすごいですよ、なぜって?プラットフォームやツールキットをセットアップする時に、開発者が辛抱強くやっていた文例再利用作業のほとんどを自動化してしまうのです。では Vagrant の働きは何かといえば、説明によると、軽くて再生可能、しかも移動可能な開発環境を創出し組み立てることができるのです。

このツールに最適なテストベッドは Stash 2.2 (訳注: 現時点の最新版は Stash 2.4) 以外にないでしょう。

目標:私自身や同僚の開発者が (ほとんど) ワンクリックで Stash をインストールできるようにすること。

はい、ほとんどと言いました。もしコンフィグレーション/プロビジョニング・フレームワーク、とりわけ VirtualBoxVagrant やそしてもちろん Git の最新バージョンを使用するなら、多少の依存性が必要だと思うので説明しています。

この魔法をまずは自分で試してください。その後セットアップに関して詳細をいくつか一緒に見ていきましょう。

  1. VirtualBoxVagrant をインストールして、Git を使用可能状態にしてください。
  2. お好きな端末を開いて base バーチャル・マシンを追加するか、自分のマシンを用意してください。
    
    
    1
    vagrant box add base http://files.vagrantup.com/precise32.box
  3. コマンド・ラインにタイプして stash-vagrant-install プロジェクトをクローンしてください。
    
    
    1
    2
    3

    git clone https://bitbucket.org/durdn/stash-vagrant-install.git

    cd stash-vagrant-install

  4. スタートアップして、バーチャル・マシン内のすべての依存性を自動利用可能状態にしてください。
    1
    vagrant up
  5. ステップ 5 はありません。完了です!

注:必要なパッケージすべてをダウンロードするのに時間が掛かるようなら、プロセスを終了させてください。
完了後、ブラウザーで http://localhost:7990/setup を開けば、新しい Stash のインストールにアクセスできます。

ssh で遠隔操作してボックスに入るバーチャル・マシンにアクセスする場合、 /vagrant フォルダーに Stash インストレーションがあります。


1
2
3
    vagrant ssh

    cd /vagrant

マニュアルで Stash をスタートするときは次のようにタイプしてください:


1
    STASH_HOME=/vagrant/stash-home /vagrant/atlassian-stash-2.2.0/bin/start-stash.sh

ちょっと裏話

これらの仕組みについて少し説明しましょう。実はとても基本的な Vagrant 設定と1つの Puppet マニフェストを使用しました。
Vagrantfile は次のようになっています:


1
2
3
4
5
6
7
8
Vagrant::Config.run do |config|
  config.vm.box = "base"
  config.vm.forward_port 7990, 7990
  config.vm.provision :puppet, :module_path => "modules" do |puppet|
    puppet.manifests_path = "manifests"
    puppet.manifest_file  = "default.pp"
  end
end

見ればわかりますが、Stash が実行される場所へ向かうポート (port 7990) と、プロビジョニング・システムとしての Puppet を指定しているだけなのです。

Java インストールは面倒だ

このセットアップで必要なもの(そしてそれが複雑化のもとなのだが)と言えば、主に Java 7 のインストールと Oracle ライセンス条件の自動承認でしょう。ライセンス上の理由で、JavaはUbuntuレポジトリには含まれていないので、自前で調達しなければなりません。

まず apt について Puppet に指示します、これはライブラリを要求することで実行します。


1
include apt

これにより Ubuntu パッケージとの相互作用がより進んだ方法で可能になります。そしてレポジトリ(Java インストーラーを含むもの)を apt ソースに追加します。


1
apt::ppa { "ppa:webupd8team/java": }

ここから apt インフラストラクチャを2段階でアップデートします。最初は余分な ppa レポジトリなしで、次はそれを含めて実行します。


1
2
3
4
5
6
7
8
9
exec { 'apt-get update':
  command =❯ '/usr/bin/apt-get update',
  before =❯ Apt::Ppa["ppa:webupd8team/java"],
}

exec { 'apt-get update 2':
  command =❯ '/usr/bin/apt-get update',
  require =❯ [ Apt::Ppa["ppa:webupd8team/java"], Package["git-core"] ],
}

この後は、Javaライセンスを自動承認することになります:


1
2
3
4
5
6
7
8
9
exec {
  "accept_license":
  command =❯ "echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections && echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections",
  cwd  =❯ "/home/vagrant",
  user =❯ "vagrant",
  path =❯ "/usr/bin/:/bin/",
  before =❯ Package["oracle-java7-installer"],
  logoutput =❯ true,
}

Stash のダウンロードと実行

以下は Stash インストレーションファイルのダウンロードについてです:


1
2
3
4
5
6
7
8
9
10
exec {
  "download_stash":
  command =❯ "curl -L http://www.atlassian.com/software/stash/downloads/binary/atlassian-stash-2.2.0.tar.gz | tar zx",
  cwd =❯ "/vagrant",
  user =❯ "vagrant",
  path =❯ "/usr/bin/:/bin/",
  require =❯ Exec["accept_license"],
  logoutput =❯ true,
  creates =❯ "/vagrant/atlassian-stash-2.2.0",
}

ホームフォルダを新規作成


1
2
3
4
5
6
7
8
9
10
exec {
  "create_stash_home":
  command =❯ "mkdir -p /vagrant/stash-home",
  cwd  =❯ "/vagrant",
  user =❯ "vagrant",
  path =❯ "/usr/bin/:/bin/",
  require =❯ Exec["download_stash"],
  logoutput =❯ true,
  creates =❯ "/vagrant/stash-home",
}

バックグランドで開始:


1
2
3
4
5
6
7
8
9
10
11
12
13
exec {
  "start_stash_in_background":
  environment =❯ "STASH_HOME=/vagrant/stash-home",
  command =❯ "/vagrant/atlassian-stash-2.2.0/bin/start-stash.sh &",
  cwd =❯ "/vagrant",
  user =❯ "vagrant",
  path =❯ "/usr/bin/:/bin/",
  require =❯ [ Package["oracle-java7-installer"],
              Exec["accept_license"],
              Exec["download_stash"],
              Exec["create_stash_home"] ],
  logoutput =❯ true,
}

これでStash実行に必要なパッケージすべてを含み、バックグランドで開始できるシステムが準備できました。すごい!

さらに詳細を知りたい方は、Puppet マニフェストをチェックして真相に迫ってください。

結論

結論を言えば、VagrantPuppet は、コード作成者やシステム管理者に対し、開発ボックスの集合を簡単に実現させたのです。必要な依存性を加味してソリューションを評価したり、完全なセットアップを実施する際にはとても役立ちます。さあ!さっそく Stash 2.2 (訳注: 現時点の最新版は Stash 2.4) をお試しあれ!

*本ブログは Atlassian Blogs の翻訳です。本文中の日時などは投稿当時のものですのでご了承ください。
*原文 : 2013 年 3 月 13 日 "Instant Java provisioning with Vagrant and Puppet: Stash one click install"