Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Continuous integration with gitlab and docker

Continuous integration with gitlab and docker

Slides for a presentation I gave at VlbgWebDev 10/2016.
To reduce risks on conference wifi i've embedded videos.
Sorry but these are not visible on speaker deck.

Avatar for Daniel Widerin

Daniel Widerin

October 11, 2016
Tweet

Other Decks in Programming

Transcript

  1. CI/CD WITH GITLAB AND DOCKER CONTINUOUS INTEGRATION REQUIREMENTS AND BEST

    PRACTICES ▸ Use a code repository / version control system ▸ Use a branching model ▸ Commit early - commit often ▸ Automate the build, tests and deployments ▸ Use an integration machine ▸ Use continuous feedback mechanisms
  2. CI/CD WITH GITLAB AND DOCKER GITLAB ▸ GitLab started as

    on-premise GitHub ▸ Full featured webgui for git version control system ▸ Integrated very powerful CI environment ▸ Workflows / Permissions supported 
 out-of-the-box ▸ http://about.gitlab.com
  3. CI/CD WITH GITLAB AND DOCKER DOCKER ▸ Allows you to

    package your application into a standardized unit for software development ▸ Often called "lightweight" virtualization approach. ▸ very fast growing and wide spreaded in open source community ▸ insanely great! ▸ http://docker.io
  4. CI/CD WITH GITLAB AND DOCKER ARCHITECTURE ▸ GitLab server owns

    code and acts as coordinator ▸ GitLab CI runners connect to the coordinator using a REST api ▸ Redis job queue consumed by runners, execute it and upload artifacts back to coordinator. ▸ The more (powerful) runners you connect, the more builds you can run in parallel
  5. CI/CD WITH GITLAB AND DOCKER EXECUTORS ▸ GitLab runners have

    multiple executors: ▸ shell run build locally ▸ docker run build using Docker container ▸ ssh run build remotely with SSH ▸ parallels run build using Parallels VM ▸ virtualbox run build using VirtualBox VM ▸ docker+machine like docker, but uses auto-scaled docker machines ▸ kubernetes (experimental)
  6. CI/CD WITH GITLAB AND DOCKER SETUP YOUR CI-PIPELINE ▸ Code

    hosted on gitlab.com or your on-premise gitlab installation ▸ add a .gitlab-ci.yml file
  7. CI/CD WITH GITLAB AND DOCKER SETUP YOUR CI-PIPELINE ▸ Code

    hosted on gitlab.com or your on-premise gitlab installation ▸ add a .gitlab-ci.yml file ▸ connect a gitlab ci runner - use following command to install on macOS with homebrew:
 brew install gitlab-ci-multi-runner 
 --without-docker
 gitlab-runner register 
 --url https://gitlab.com 
 --token <token>
  8. CI/CD WITH GITLAB AND DOCKER SETUP YOUR CI-PIPELINE ▸ Code

    hosted on gitlab.com or your on-premise gitlab installation ▸ add a .gitlab-ci.yml file ▸ connect a gitlab ci runner - use following command to install on macOS with homebrew:
 brew install gitlab-ci-multi-runner 
 --without-docker
 gitlab-runner register 
 --url https://gitlab.com 
 --token <token> ▸ start the runner gitlab-runner
 gitlab-runner install
 gitlab-runner start
  9. CI/CD WITH GITLAB AND DOCKER SETUP YOUR CI-PIPELINE ▸ Code

    hosted on gitlab.com or your on-premise gitlab installation ▸ add a .gitlab-ci.yml file ▸ connect a gitlab ci runner - use following command to install on macOS with homebrew:
 brew install gitlab-ci-multi-runner 
 --without-docker
 gitlab-runner register 
 --url https://gitlab.com 
 --token <token> ▸ start the runner gitlab-runner
 gitlab-runner install
 gitlab-runner start ▸ commit and push to remote to trigger ci pipeline.
  10. CI/CD WITH GITLAB AND DOCKER PYRAMID TUTORIAL APP ▸ Found

    in https://gitlab.com/widerin/vlbg-webdev-1016/ tree/pyramid ▸ Just output the foo in route http://localhost:8080/hello/foo ▸ pytest covered ▸ build and tested on gitlab in docker
  11. CI/CD WITH GITLAB AND DOCKER HOW TO CONNECT SERVICES? ▸

    your application requires a database like postgresql ▸ your application requires a message queue like redis or rabbitmq ▸ your application requires a index engine like solr or elasticsearch ▸ very time consuming test setup in default ci-scenarios APPLICATION DATABASE INDEX
  12. CI/CD WITH GITLAB AND DOCKER FLASK TUTORIAL PING APP V1

    ▸ Found in https://gitlab.com/widerin/vlbg-webdev-1016/ tree/master/example-1 ▸ Ping application responses with "pong!"
 http://localhost:5000/ping ▸ pytest covered ▸ build and tested on gitlab in docker
  13. CI/CD WITH GITLAB AND DOCKER FLASK TUTORIAL PING APP V2

    ▸ Found in https://gitlab.com/widerin/vlbg-webdev-1016/ tree/master/example-2 ▸ Ping application responses with "pong!" and outputs the number of pings you sent to it.
 http://localhost:5000/ping ▸ redis as persistence layer ▸ pytest covered ▸ build and tested on gitlab in docker
  14. CI/CD WITH GITLAB AND DOCKER NATIVE BUILDS IN DOCKER ▸

    Use your favourite linux docker image ▸ build within the image ▸ compile your application for your production servers in same linux distribution ▸ use caches for node_modules/, .m2/repository, ... ▸ you can build your own docker base and/or test images