diff --git a/INTEGRATION.rst b/INTEGRATION.rst
new file mode 100644
index 0000000..3a0d92f
--- /dev/null
+++ b/INTEGRATION.rst
@@ -0,0 +1,156 @@
+
+Continuous Integration
+======================
+
+Check your formulas locally before you create pull request.
+
+
+Usage
+------------------
+
+Update pillars in tests/pillar/\*.sls with test data.
+Executed tests with:
+
+.. code-block:: shell
+
+  kitchen list
+  kitchen test
+
+
+Test Kitchen
+------------------
+
+Use Travis/Jenkins to spin a kitchen instances in Docker or OpenStack environment.
+Default configuration is defined by ``.kitchen.yml`` and ``tests/pillar/*.sls``
+
+Override your specific needs with ``.kitchen.<backend|local>.yml`` that you may load as:
+``KITCHEN_LOCAL_YAML=.kitchen.<driver>.yml kitchen <action> <suite>``.
+
+Example: ``KITCHEN_LOCAL_YAML=.kitchen.local kitchen verify server-ubuntu-1404 -t tests/integration``.
+
+Base kitchen-test actions:
+
+1. *create*, provision an test instance (VM, container)
+2. *converge*, run a provisioner (shell script, kitchen-salt)
+3. *verify*, run a verification (inspec, other may be added)
+4. *destroy*
+
+
+Verifier
+~~~~~~~~
+
+The `Busser <https://github.com/test-kitchen/busser>`_ *Verifier* goes with test-kitchen by default.
+It is used to setup and run tests implemented in ``<repo>/test/integration``. It guess and installs the particular driver to tested instance.
+By default `InSpec <https://github.com/chef/kitchen-inspec>`_ is expected.
+
+You may avoid to install busser framework if you configure specific verifier in ``.kitchen.yml`` and install it kitchen plugin locally:
+
+	verifier:
+		name: serverspec
+
+If you would to write another verification scripts than InSpec store them in ``<repo>/tests/integration/<suite>/<busser>/*``.
+``Busser <https://github.com/test-kitchen/busser>`` is a test setup and execution framework under test kitchen.
+
+
+**InSpec**
+
+Implement integration tests under ``<repo>/tests/integration/<suite>/<busser>/*`` directory with ``_spec.rb`` filename
+suffix.
+
+Docs:
+
+* https://github.com/chef/inspec
+* https://github.com/chef/kitchen-inspec
+
+Requirements
+~~~~~~~~~~~~
+
+Use latest stable kitchen-salt and kitchen-test.
+Minimal supported version of kitchen-salt is >= v0.0.25.
+
+
+
+Jinja templates
+---------------
+To check jinja templates you may use:
+
+.. code-block:: shell
+
+  cat > check_my_jinja_recursive.py <<-EOF
+  import sys
+  import os
+  from jinja2 import Environment
+
+
+  def fileList(path, fileTypes):
+    matches = []
+    for root, dirnames, filenames in os.walk(path):
+      for filename in filenames:
+        if filename.endswith(fileTypes):
+          matches.append(os.path.join(root, filename))
+    return matches
+
+  env = Environment()
+  for path in sys.argv:
+    for template in fileList(path, ('.conf', '.ini', '.jinja2') ):
+      with open(template) as t:
+        print"Checking:", template
+        env.parse(t.read())
+  EOF
+
+
+Intstall Test Kitchen
+---------------------
+See http://kitchen.ci/ for more details.
+
+To install user side use:
+
+.. code-block:: shell
+
+  # install kitchen
+  gem install test-kitchen
+
+  # install additional plugins
+  gem install kitchen-docker kitchen-salt
+  gem install kitchen-vagrant kitchen-openstack kitchen-inspec busser-serverspec
+
+First you have to install ruby package manager `gem <https://rubygems.org/>`_.
+
+One may be satisfied installing it system-wide right from OS package manager which is preferred installation method.
+For advanced users or the sake of complex environments you may use `rbenv <https://github.com/rbenv/rbenv>`_ for user side ruby installation.
+
+ * https://github.com/rbenv/rbenv
+ * http://kitchen.ci/docs/getting-started/installing
+
+An example steps then might be:
+
+.. code-block:: shell
+
+  # get rbenv
+  git clone https://github.com/rbenv/rbenv.git ~/.rbenv
+
+  # configure
+  cd ~/.rbenv && src/configure && make -C src     # don't worry if it fails
+  echo 'export PATH="$HOME/.rbenv/bin:$PATH"'>> ~/.bash_profile
+  # Ubuntu Desktop note: Modify your ~/.bashrc instead of ~/.bash_profile.
+  cd ~/.rbenv; git fetch
+
+  # install ruby-build, which provides the rbenv install command
+  git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
+
+  # list all available versions:
+  rbenv install -l
+
+  # install a Ruby version
+  # maybe you will need additional packages: libssl-dev, libreadline-dev, zlib1g-dev
+  rbenv install 2.0.0-p648
+
+  # activate
+  rbenv local 2.0.0-p648
+
+  # install test kitchen
+  gem install test-kitchen
+
+An optional ``Gemfile`` in the main directory may contain fine tuned dependencies for specific workflows.
+To install Gefmfile dependencies run ``gem install bundler`` and then run ``bundler install``.
+
