CakePHPで学ぶ継続的インテグレーションの勉強メモ#4.2.1

  • 9
    Like
  • 0
    Comment

■もくじ

CakePHPで学ぶ継続的インテグレーションの勉強メモ#4.2.1
CakePHPで学ぶ継続的インテグレーションの勉強メモ#4.2.2
CakePHPで学ぶ継続的インテグレーションの勉強メモ#4.2.3
CakePHPで学ぶ継続的インテグレーションの勉強メモ#4.2.4
CakePHPで学ぶ継続的インテグレーションの勉強メモ#4.3.1〜4.3.3
CakePHPで学ぶ継続的インテグレーションの勉強メモ#4.3.4〜4.3.5
CakePHPで学ぶ継続的インテグレーションの勉強メモ#5.1〜5.2
CakePHPで学ぶ継続的インテグレーションの勉強メモ#5.3.1〜5.3.3

■環境メモ

OS X Yosemite 10.10.5
VirtualBox 5.0.10
Chef Development Kit Version: 0.10.0

■継続的インテグレーション4.2.1

vagrant init
余分なコメントアウトは排除して、vagrant up

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box ="opscode-ubuntu-14.04"
  config.vm.network :private_network, ip: "192.168.33.20"
end

◯Saharaインスコ

Vagrantの仮想サーバに対する変更をロールバック可能にするプラグイン
インストールやデプロイのテストで利用するらしい

console
$ vagrant plugin install sahara

インストールが終わると、プラグインが有効になるらしい
仮想サーバへの変更をロールバック可能にする

console
$ vagrant sandbox on

ロールバックを可能にしたあとの変更は、次のコマンドでロールバック可能らしい

console
$ vagrant sandobox rollback

変更を恒久的に反映する

console
$ vagrant sandbox commit

◯vagrant-omnibus

Bentoが提供するboxには、Chef Client、Chef Soloは含まれていないらしい。

vagrant-omnibusというプラグインを使えば
Chef Client、Chef Soloを自動的にインストールしてくれるらしい

console
$ vagrant plugin install vagrant-omnibus

プラグインを有効にする為に、Vagrantfileを変更する。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.omnibus.chef_version = :latest
  config.vm.box ="opscode-ubuntu-14.04"
  config.vm.network :private_network, ip: "192.168.33.20"
end

◯vagrant-cachier

aptコマンドやyumコマンドなどでダウンロードされるパッケージファイルを、
ホストOS側にキャッシュするためのプラグインらしい
他の案件でも使いたい。

console
$ vagrant plugin install vagrant-cachier

プラグインを利用するには、Vagrantfileの変更が必要。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  if Vagrant.has_plugin?("vagrant-cachier")
    config.cache.scope = :box
  end

  config.omnibus.chef_version = :latest
  config.vm.box ="opscode-ubuntu-14.04"
  config.vm.network :private_network, ip: "192.168.33.20"
end

config.cache.scopeには:boxまたは:machineのいずれかを設定可能。
-:boxは、ダウンロードパッケージは複数のboxをまたいで共有される。
-:macineは、仮想サーバ単位でパッケージを保存する。複数の仮想サーバでapt-get updateやyum installなどを同時に実行する場合は、ロックによるエラーが発生する可能性があるので、こちらを使う。

今回は、同時にプロビジョニングすることはないので、
効率化の観点から:boxを指定する。

◯マルチVM機能による複数仮想サーバの起動

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  if Vagrant.has_plugin?("vagrant-cachier")
    config.cache.scope = :box
  end

  config.vm.define :develop do |develop|
    develop.omnibus.chef_version = :latest
    develop.vm.hostname = "develop"
    develop.vm.box = "opscode-vm-bentode-ubuntu-14.04"
    develop.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.04_chef-provisionerless.box"
    develop.vm.network :private_network, ip: "192.168.33.20"
  end

  config.vm.define :ci do |ci|
    ci.omnibus.chef_version = :latest
    ci.vm.hostname = "ci"
    ci.vm.box = "opscode-ubuntu-14.04"
    ci.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.04_chef-provisionerless.box"
    ci.vm.network :private_network, ip: "192.168.33.100"
  end

  config.vm.define :deploy do |deploy|
    deploy.omnibus.chef_version = :latest
    deploy.vm.hostname = "deploy"
    deploy.vm.box = "opscode-ubuntu-14.04"
    deploy.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.04_chef-provisionerless.box"
    deploy.vm.network :private_network, ip: "192.168.33.200"
  end
end

変更したあと仮想サーバを再起動する
起動していることを確認する

console
vagrant reload
vagrant status

◯Chef Soloとの組み合わせによる自動プロビジョニング

vagrantは、仮想サーバの起動時、指定したタイミングで、
プロビジョニングが可能。
プロビジョニングには、シェルスクリプト、Puppet、Chef Server、Chef Soloなどを利用できる。
今回は、Chef Soloを利用する。

Chef Soloのリポジトリを作成するためにKnife-soloコマンド、
クックブックを作成するためにknifeコマンドを利用する。
まずは、必要なGemパッケージをインストールするので、
Gemのパッケージ管理ツールにBundlerをインストールする。

console
$ gem install bundler

次に、「knife-solot」、「Berkshelf」と呼ばれるクックブックの依存家計ツールをインストールするために、
Vagrantfileと同じディレクトリにGemfileを作成する。

source 'https://rubygems.org'

gem 'chef'
gem 'knife-solo'
gem 'berkshelf', '~> 3.1.0'

Gemfileを作成したらインストールする

console
$ bundle install

準備が整ったら、続いてChef Soloによるプロビジョニングの準備を進める。
まずは、Vagrantfileのあるディレクトリで、
下記コマンドを実行する。

console
bundle exec knife solo init --berkshelf .