DOCKER & CONFIGURATIEMANAGEMENTfiles.meetup.com/14564952/Oxilion-Docker-meetup-12-07-2016.pdf ·...

Post on 07-Oct-2020

2 views 0 download

Transcript of DOCKER & CONFIGURATIEMANAGEMENTfiles.meetup.com/14564952/Oxilion-Docker-meetup-12-07-2016.pdf ·...

DOCKER &CONFIGURATIEMANAGEMENT

Docker Meetup 12-07-2016

- In dienst sinds 2012 bij Oxilion- Drones- Voetballiefhebber- Verzot op techniek

EVEN VOORSTELLEN RIK

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.

• Bamboo• Drone.io• Gitlab Ci• GoCD• Jenkins.io• Travis-CI

CONTINUOUS INTEGRATION MOGELIJKHEDEN

• Autoscaling • Volledig geïntegreerd met Gitlab• Realtime logging• Geschreven in GO• Continuous Delivery mogelijkheden

Gitlab 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

Travis-CI

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

Gitlab-ci.yml voor Ansible role testing

---sudo: requiredenv: - distribution: ubuntu version: 12.04 init: /sbin/init run_opts: ""services: - dockerbefore_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 (1/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 Ansible role testing (2/2)

sudo: falselanguage: rubycache: bundlerscript: "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

travis-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

Gitlab-ci.yml voor Puppet module testing