17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerCli-Driver + LocalShell-Provisoner(Itamae) + Shell-Verifier(Serverspec)でTest-Kitchen最速フロー

Last updated at Posted at 2015-07-09

前回の「Test-KitchenでShell-VerifierとDockerCli-Driverで高速にServerspecテストを回す」の続きっちゃ続きです。

要は

Dockerで起動時間を限りなく小さくし、テストをローカルから叩いてテスティングフレームワークのインストール時間を削るまでできたら、あとはもう、プロビジョニングツールのインストール時間すら削ることができれば、ほぼプロビジョニングとテストの実行時間のみの最速なワークフローが組めるよねって話です。
Chefだと、どうやってもインストールから逃れることは不可能なので、ここはItamaeで行きましょう。

ということでやってみる

LocalShell-ProvisonerはShell-Verifierのほぼ丸パクリで作りましたw
(もちろん、作者の許可は取ってます)
https://github.com/marcy-terui/kitchen-provisioner-local_shell

こんな感じで。

Gemfile
source "https://rubygems.org"

gem 'test-kitchen'
gem 'kitchen-verifier-shell'
gem 'kitchen-provisioner-local_shell'
gem 'kitchen-docker_cli'
gem 'kitchen-vagrant'
gem 'serverspec'
gem 'docker-api'
gem 'kitchen-itamae'
gem 'itamae', '>= 1.3.3'

Itamaeだけバージョン指定入ってますが、これを試そうと思ったらちょっとしたバグというか上手くいってない部分を見つけたので、PR送りました。これが入ったのが 1.3.3 です。

また、今回の比較対象は kitchen-itamae を使って、インスタンス内にItamaeをインストールして実行するスタイルの以下と比較します。

  • Vagrant-Driver + Busser-Verifierのオーソドックスっぽい版
  • 前回の最速からChef→Itamaeになってる感じで、DockerCli-Driver + Shell-Verifier版

なので、こんな感じ。

.kitchen.yml
---
platforms:
  - name: ubuntu-14.04

suites:
  # Vagrant-Driver + Itamae-Provisioner + Busser-Verifier
  - name: example1
    provisioner:
      name: itamae
    driver:
      name: vagrant
    run_list:
      - recipes/default.rb

  # DockerCli-Driver + Itamae-Provisioner + Shell-Verifier
  - name: example2
    provisioner:
      name: itamae
    driver:
      name: docker_cli
    transport:
      name: docker_cli
    run_list:
      - recipes/default.rb
    verifier:
      name: shell
      command: ./bin/rspec test/integration/docker_cli/serverspec/example_spec.rb

  # DockerCli-Driver + LocalShell-Provisioner + Shell-Verifier
  - name: example3
    provisioner:
      name: local_shell
      command: ./bin/itamae docker kitchen/recipes/default.rb --container=$KITCHEN_CONTAINER_ID
    driver:
      name: docker_cli
    transport:
      name: docker_cli
    run_list:
      - recipes/default.rb
    verifier:
      name: shell
      command: ./bin/rspec test/integration/docker_cli/serverspec/example_spec.rb

レシピやテスト内容は前回と全く一緒ですので割愛します。

Vagrant-Driver + Itamae-Provisioner + Busser-Verifier

$ time ./bin/kitchen test example1 -l warn
>>>>>> wget, curl, fetch, perl or python not found on this instance.

real	3m56.800s
user	0m8.726s
sys 	0m3.052s

約4分。kitchen-itamaeはChefのオムニバスインストーラで入るRubyを使ってItamaeをインストール・実行してるのでChefインストール時間 + Itamaeインストール時間なので、もう少し遅いかと思いましたが、なかなか速いですね。

DockerCli-Driver + Itamae-Provisioner + Shell-Verifier(Serverspec)

$ time ./bin/kitchen test example2 -l warn
>>>>>> wget, curl, fetch, perl or python not found on this instance.

.

Finished in 7.07 seconds (files took 0.61411 seconds to load)
1 example, 0 failures


real	2m30.228s
user	0m4.245s
sys 	0m1.049s

ふむ。こちらは予想通りと言った感じです。まあ、だいぶ速いですね。

DockerCli-Driver + Shell-Provisioner(Itamae) + Shell-Verifier(Serverspec)

$ time ./bin/kitchen test example3 -l warn

 INFO : Starting Itamae...
 INFO : Recipe: /Users/marcy/github/high-speed-infra-ci/kitchen/recipes/default.rb
 INFO :   execute[apt-get update -y] executed will change from 'false' to 'true'
 INFO :   package[nginx] installed will change from 'false' to 'true'
 INFO : Image created: edc827fdb43070818b41383cdfd9c6cb7aba0d67b98a0bd9cd90fcda138c61f0

.

Finished in 4.52 seconds (files took 0.31834 seconds to load)
1 example, 0 failures


real	1m9.589s
user	0m3.420s
sys 	0m0.676s

1分キタ━(゚∀゚)━!
これはもうコーヒー入れる時間は完全にありませんね。
Provisionerに-lオプションが全く効いてなくて色々出力されちゃってますがw

まとめ

まあ、当たり前っちゃ当たり前なんですが、Dockerで起動も数秒(というかほぼ1秒未満)になり、プロビジョニングフレームワークのインストールもテストの準備も既にできてるローカルから叩かせることで実質ほぼプロビジョニングとテスト実行の時間だけで済むようになります。

何もかも全部1からやる必要ないと思うので、効率も考えて上手くプラグインを組み合わせるとよいんじゃないでしょうか。YAMLで簡易に記述できて、プラグインの組み合わせで良い感じにできるのがTest-Kitchenの価値だと思います。

17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?