SYP-2023-04-26

CI-Anforderungen:

  • Gemeinsame Codebase (Versionsverwatung, alles muss drin sein)
  • Automatisierter build (unabhängug von der Entwicklungsumgebung)
  • Kontinuierliche Testentwicklung
  • Jeder commitet mindestens jeden Tag
    • häufig integrieren
    • Fehlergrund leicht einschränkbar
  • CI Server (nach jedem Commit build und tests)
  • Sofortige Problembehebung
  • Jeder Commit auf mainline triggert Build
  • Test in einem Production "Klon"
  • Der Build muss schnell sein (bleiben)
  • Ergebnisse sind öffentlich
  • Jeder kann sehen was passiert

CI ist die Voraussetzung zur Continous Delivery (Pilepine)
Gitlab CI Gesteuert durch YAML Dateien als Teil des Repositories

  • Jobs: was ist zu tun (Compilen)
  • Stages: wann (Testen nach compilen)
    Wenn alle Jobs einer Stage erfolgreich sind wird nächste Stage ausgeführt
    Wenn ein Job einer Stage failed endet die ganze Pipeline
    Definition in .gitlab-ci.yml (Teil des Repositories)
image: maven:latest

[stages]
stages:
	- build
	- test

[variablen, keine passwörter/keys!]
variables:

[unterschiedliche Jobs]
build:
	rules:
		- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ...'
	stage: build
	script:
		- mvn compile
	variables:
	
test:
	stage: test
	script:
		- mvn test

[Reports]
artifacts: 
	reports:
		junit:
		...

4 Perspektiven

  • Systemperspektive: wie ist das System in die Umbgebung eingebettet, mit welchen Systemen interagiert es wie
  • Statische Perspektive, zentrale Komponenten ihre Schnittstellen und Beziehungen i.d.R. hierarchisch verfeinert.
  • Dynamische Perspektive: wie arbeiten die Komponenten zur Laufzeit zusammen. Beschränkt auf wichtige interaktionen
  • Verteilungsperspektive: wie werden Komponenten der statischein Perspektive auf Infrastruktur abgebildet. Auch Aufteilung auf Teams