Streamlining

build & deploy pipelines for microservices

LeviNine Andrei Mustață Wehkamp

Mustață

  • Software-related activities
  • LeviNine
  • Wehkamp

wehkamp.nl

  • Lots of people working
  • Co-ordination can be hard

Architecture

  • Microservices
  • Apache Kafka
  • One repo / service
  • Team manages repos
  • Decoupled ✓

Tech stack

  • Specialists
  • Scala, dotnet, JavaScript
  • Less writing, more reusing
  • Standardised packaging - docker
  • Freedom to experiment ✓✓

Building

  • git repo
  • ???
  • docker image

git repo

  • Naming convention
  • Dockerfile

Jenkins

  • Jenkins DSL (Groovy)
  • Job definitions in git
job('build-some-service') {
    scm {
        git('git://github.com/some-organisation/some-service.git')
    }
    triggers {
        scm('H/15 * * * *')
    }
    steps {
        maven('-e clean test')
    }
}

Jenkins seed

  • Scan all the repos
  • Create build job
docker build
docker push
  • Docker images
  • JARs, nupkg, npm

Deploying

  • docker image registry
  • ???
  • config
  • docker orchestrator

docker image registry

  • login-service: 192-4f23cd
  • basket-service: 312-89bb31
  • ...

Jenkins

  • Jenkins DSL (Groovy)
  • Job definitions in git
job('build-some-service') {
    scm {
        git('git://github.com/some-organisation/some-service.git')
    }
    triggers {
        scm('H/15 * * * *')
    }
    steps {
        maven('-e clean test')
    }
}

Jenkins seed

  • Scan all the repos
  • Create deploy job
  • Get image
  • Get config

Config

  • Environment variables
  • Set in git

Sum it up

  • Naming conventions
  • Templates
  • Standardise packaging
  • Standardise deploying

Finito

Streamlining

By andreimoustache