DOCKER & CONFIGURATIEMANAGEMENT Docker Meetup 12-07-2016
EVEN VOORSTELLEN RIK - In dienst sinds 2012 bij Oxilion - Drones - Voetballiefhebber - Verzot op techniek
INHOUD Configuratie-management? Continuous Integration mogelijkheden Gitlab CI Travis-CI Voorbeeld op basis van Ansible Voorbeeld op basis van Puppet
CONFIGURATIEMANAGEMENT? Configuration management (CM) is a systems engineering process for establishing and maintaining consistency of a product's performance, functional, and physical attributes with its requirements, design, and operational information throughout its life.
CONFIGURATIEMANAGEMENT & OXILION Bij Oxilion wordt configuratiemanagement toegepast op alle door ons beheerde servers middels Puppet. We gebruiken peer-review en continuous integration om zorg te dragen dat alle wijzigingen juist zijn.
CONTINUOUS INTEGRATION MOGELIJKHEDEN Bamboo Drone.io Gitlab Ci GoCD Jenkins.io Travis-CI
Gitlab CI Autoscaling Volledig geïntegreerd met Gitlab Realtime logging Geschreven in GO Continuous Delivery mogelijkheden
Travis-CI Open-source sinds 2011 Gratis voor open-source projecten Fantastische integratie met Github Bewaar je configuratie bij je code Ondersteuning voor diverse talen en frameworks waaronder Xcode en Android
Travis-CI
Gitlab-ci.yml voor Ansible role testing Centos 7: image: docker:latest services: - docker:dind before_script: - docker build --rm=true --file=tests/dockerfile.centos-7 --tag=centos-7:ansible. script: - container_id=$(mktemp) - docker run --detach ${RUN_OPTS_CENTOS7} centos-7:ansible > "${container_id}" - docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml --syntax-check - docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml - docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml grep -q 'changed=0.*failed=0' && (echo "Idempotence test pass" && exit 0) (echo "Idempotence test fail" && exit 1) - docker stop "$(cat ${container_id})" variables: RUN_OPTS_CENTOS7: --privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro --volume=/tmp/$(mktemp):/run
Travis-ci.yml voor Ansible role testing (1/2) --- sudo: required env: - distribution: ubuntu version: 12.04 init: /sbin/init run_opts: "" services: - docker before_install: - 'sudo docker pull ${distribution}:${version}' - 'sudo docker build --rm=true --file=tests/dockerfile.${distribution}-${version} --tag= ${distribution}-${version}:ansible tests'
Travis-ci.yml voor Ansible role testing (2/2) script: - container_id=$(mktemp) - 'sudo docker run --detach --volume="${pwd}":/etc/ansible/roles/role_under_test:ro ${run_opts} ${distribution}-${version}:ansible "${init}" > "${container_id}"' - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml --syntax-check' - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml' - sudo docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml grep -q 'changed=0.*failed=0' && (echo 'Idempotence test: pass' && exit 0) \ (echo 'Idempotence test: fail' && exit 1) - 'sudo docker stop "$(cat ${container_id})"' notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/
travis-ci.yml voor Puppet module testing sudo: false language: ruby cache: bundler script: "bundle exec rake validate lint spec" matrix: fast_finish: true include: - rvm: 2.1.6 bundler_args: --without system_tests env: PUPPET_GEM_VERSION="~> 4.0" STRICT_VARIABLES="yes" - rvm: 2.1.5 bundler_args: --without system_tests env: PUPPET_GEM_VERSION="~> 3.0" FUTURE_PARSER="yes" - rvm: 2.1.5 bundler_args: --without system_tests env: PUPPET_GEM_VERSION="~> 3.0" notifications: email: false
Gitlab-ci.yml voor Puppet module testing Ruby2: image: "centos:7" script: - yum -y install ruby-gem ruby-devel gcc libxslt-devel libxml2-devel patch make git g++ gcc-c++ - gem install bundler - bundle update - export LANG=en_US.UTF-8 - export LANGUAGE=en_US.UTF-8 - export LC_ALL=en_US.UTF-8 - bundle exec rake