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

Entwicklungsumgebungen automatisieren

Entwicklungsumgebungen automatisieren

Vortrag auf der "Continuous Lifecycle 2018"

Zum Entwickeln von Software benötigt man zahlreiche Tools, beispielsweise Laufzeitumgebungen, Compiler, Build- und Test-Tools. Auch wird das Entwickeln komfortabler, wenn Services wie Datenbanken lokal installiert sind. Gleichzeitig wollen viele Entwickler mit ihren vertrauten Betriebssystemen und IDEs arbeiten. Eine gewisse Standardisierung und Automatisierung ist jedoch sinnvoll, um sicherzustellen, dass alle dieselben Versionen von Services und Laufzeitumgebungen verwenden, neue Entwickler schnell starten können oder der Quellcode einheitlich formatiert ist.

Dieser Vortrag stellt einen Ansatz auf Basis von editorconfig, Docker und nix vor und gibt darüber hinaus einen Überblick weiterer Möglichkeiten.

Christine Koppelt

November 15, 2018
Tweet

More Decks by Christine Koppelt

Other Decks in Programming

Transcript

  1. Christine Koppelt Senior Consultant bei INNOQ • Digitalisierungprojekte • Architektur,

    DevOps, Data Engineering • Entwicklung mit Java & Python • Orga Munich Data Engineering Meetup
  2. Beispiel für eine Anwendung Postgres Database BPMN Dateien REST API

    Web Application pgAdmin kafkacat Camunda Modeler OpenJDK Maven curl Kafka Cluster Kafka Cluster Kafka Cluster
  3. Virtuelle Maschine? • Moderne Form: Cloud z.B. AWS WorkSpaces •

    Overhead z.B. durch benötigten Client • Flexibilität? • Automatisierung? – Vagrant oder Packer von HashiCorp • Reproduzierbarkeit oder „Golden Images“?
  4. docker-compose • Tool um mehrere Container zusammen zu starten •

    Wird per YAML Datei konfiguriert • Ermöglicht Deklaration von Abhängigkeiten zwischen Containern • Bei Mac und Windows schon dabei, auf Linux separate Installation
  5. Beispiel: docker-compose version: '3.1' services: postgres: image: postgres:10.4 environment: POSTGRES_PASSWORD:

    postgres POSTGRES_DB: lds volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql timeseries-db: ...
  6. Alternative: Minikube • Single-Node Implementierung von Kubernetes • Virtuelle Maschine

    sinnvoll bzw. notwendig – Installationsaufwand – Ressourcenintensiv • Webseite: https://kubernetes.io/docs/setup/minikube/
  7. Alternative: kubefwd • Kommandozeilentool das den Zugriff auf Services in

    einem Cloud Kubernetes Cluster vereinfacht • Lokal muss nur noch die Anwendung in Entwicklung laufen • Vereinfachung für kubectl port-forward • Webseite: https://github.com/txn2/kubefwd
  8. Ebenfalls Docker? • Docker kann auch für Kommandozeilentools verwendet werden

    • Problemstellen – Lokale Dateien – Graphische Tools – User IDs/Berechtigungen – Zugriff auf andere Services
  9. Beispiel docker run -it --rm \ -v "$(pwd)":/usr/src/mymaven \ -w

    /usr/src/mymaven \ maven:3.3-jdk-8 \ mvn clean install
  10. Nix • Package Manager und Environment Manager für Linux und

    Mac • Unterstützt parallele Installation mehrer Versionen • ~50.000 Pakete, meistens sehr aktuell • Eigene Pakete können einfach ergänzt werden • Eigene Konfigurationssprache • Webseite: https://nixos.org
  11. Beispiel: default.nix with import <nixpkgs>{}; stdenv.mkDerivation { name = "my-service";

    buildInputs = [openjdk8 maven curl nodejs-10_x kubectl kubernetes-helm influxdb kafkacat]; }
  12. Alternative: Conda • Package Manager und Environment Manager für Linux,

    Windows und MacOS • Stammt aus dem Datenanalyseumfeld, mittlerweile aber um sehr viele allgemeine Tools erweitert • Webseite: https://conda.io/miniconda.html • Package Repository: https://anaconda.org/search
  13. Einheitliche Formatierung: .editorconfig • Datei im INI-Format, liegt im git

    Repository • Konfiguration von Einrückungen, Zeichensatz und Leerzeichen • Native Unterstützung durch viele Editoren und IDEs, Plugins für viele weitere • Tools/Plugins für Maven und npm verfügbar
  14. Beispiel: .editorconfig [*] charset = utf-8 end_of_line = lf insert_final_newline

    = true trim_trailing_whitespace = true indent_style = space indent_size = 4 [*.yml] indent_size = 2
  15. Verfeinerung • Nutzung sprachspezifischer Tools/Plugins – eslint (JavaScript), Checkstyle (Java)

    oder pylint (Python) • Prüfung der Formattierung Bestandteil des Builds • Erzwingen von einheitlichen Zeilenumbrüchen mit .gitattributes
  16. Zusammenfassung • Es gibt zahlreiche Möglichkeiten, das Setup von Entwicklungsumgebungen

    zu automatisieren ohne das Entwickler auf ihre gewohnte Arbeitsumgebung verzichten müssen
  17. Kombination docker-compose, nix und editorconfig: Setup • Skripte zum Setup

    der Entwicklungsumgebung liegen mit im git Repository • Einheitlich für MacOS & Linux • Nur Docker und nix müssen systemweit installiert werden • Installation mehrere Tools/Services in jeweils einem Schritt
  18. Kombination docker-compose, nix und editorconfig: Nutzung • Geringer Overhead •

    Parallele Nutzung verschiedener Versionen (Tools & Services) • Einheitliches Toolset innerhalb eines Teams • Schneller Wechsel zwischen unterschiedlichen Umgebungen
  19. Danke! Fragen? www.innoq.com innoQ Deutschland GmbH Krischerstr. 100 40789 Monheim

    am Rhein Germany +49 2173 3366-0 Ohlauer Str. 43 10999 Berlin Germany Ludwigstr. 180E 63067 Offenbach Germany Kreuzstr. 16 80331 München Germany Gewerbestr. 11 CH-6330 Cham Switzerland +41 41 743 01 11 Albulastr. 55 8048 Zürich Switzerland innoQ Schweiz GmbH Christine Koppelt [email protected] @ckoppelt
  20. Bildquellen • https://unsplash.com/photos/oEtQ0C6HS2I • https://unsplash.com/photos/4r9tYHlwTL8 • https://unsplash.com/photos/NL_DF0Klepc • https://unsplash.com/photos/LfG7RwMM6g8 •

    https://openclipart.org/detail/284274/enthusiastic-couple • https://openclipart.org/detail/295846/female-computer-user • https://openclipart.org/detail/284339/perplexed-3