CircleCIでDockerコンテナに対してansibleを実行しserverspecでテストをする
November 13, 2014
参考
KAIZEN platform Inc. における運用自動化 - Speaker Deck
Continous Integration and Delivery with Docker - CircleCI
TL;DR
CircleCI上でDockerコンテナを立て、
そのコンテナに対してプロビジョニングを行い、
プロビジョニング後のコンテナに対してテストを行う
DockerコンテナにAnsibleを実行する
コミットする度にDockerのimageをpullするのは時間がもったいないので
cache_directories
を利用し、imageをexportしておき
実行時にimportするようにすると多少速くなる。
.
├── Dockerfile
├── ansible/
└── circle.yml
- Dockerfile
FROM kenjiskywalker/dockerfile-centos-ansible
- circle.yml
machine:
services:
- docker
dependencies:
pre:
- if [[ -e docker_ansible_image.tar ]]; then cat docker_ansible_image.tar | docker import - kenjiskywalker/dockerfile-centos-ansible ; docker load --input docker_ansible_image.tar ; else docker build . ; docker save -o docker_ansible_image.tar kenjiskywalker/dockerfile-centos-ansible ; fi
cache_directories:
- "docker_ansible_image.tar"
test:
post:
- docker run -v `pwd`/ansible:/ansible kenjiskywalker/dockerfile-centos-ansible ansible-playbook /ansible/ci.yml -i /ansible/inventory_localhost -c local
こんな感じの設定ファイルを置いておくとansible
ディレクトリをマウントし
Dockerコンテナがansibleを実行できる状態であればDockerコンテナに対して
ansibleが実行できる。この続きにServerspecを記述することで
- リポジトリにansibleのファイルをコミットする
- CircleCI上にてDockerコンテナを起動
- Dockerコンテナに対してansibleでプロビジョニング
- そのプロビジョニング結果をServerspecでテストをする
のようなことができる。
wercker
werckerでも同じようなことができる。
CircleCIと同様にファイルをキャッシュするには
$WERCKER_CACHE_DIR
を利用すればよいかと。
- wercker.yml
box: wercker-labs/docker
build:
steps:
- script:
name: docker build
code: docker build .
- script:
name: docker run
code: docker run -v `pwd`/ansible:/ansible dockerfile/ansible ansible-playbook /ansible/ci.yml -i /ansible/inventory_localhost -c local
以上、メモです。