Bevor man Images aus Dockerfiles baut
lint dockerfile: stage: pre-build image: hadolint/hadolint:v2.12.0-alpine script: - hadolint ./Dockerfile
Ein ganz kleines Beispiel, das ganz real regelmäßig verwende um rauszufinden ob die CI-CD Runners nach einem Update noch funktionieren.
Folgendes Script mit Unittest soll per Gitlab Pipeline erst erfolgreich seinen Unittest durchlaufen, bevor es gestartet wird.
Hier ein sehr kleines Script "wuerfel.py" das einfach nur einen Würfelwurf mit dem sechs-seitigen Würfel simuliert.
#!/usr/bin/env python3 """einmal wuerfeln, bisher nur mit d6""" def d6wuerfeln(): """d6wuerfeln - ein wurf mit dem D6""" import random seiten = (1, 2, 3, 4, 5, 6) return random.choice(seiten) if __name__ == '__main__': print(d6wuerfeln())
Und hier der dazupassende Unit-Test "test_wuerfel.py"
#!/usr/bin/env python3 """teste das wuerfel script""" import unittest import wuerfel class WuerfelTestCase(unittest.TestCase): """teste wuerfel modul""" def test_ist_integer(self): """es sollen nur integer zurueck gegeben werden""" self.assertTrue(isinstance(wuerfel.d6wuerfeln(), int), "kein Integer") def test_kleinergleich6(self): """die zahl soll kleiner oder gleich 6 sein""" self.assertTrue(wuerfel.d6wuerfeln() <= 6, "groesser als 6") def test_groessergleich1(self): """die zahl soll groesser oder gleich 1 sein""" self.assertTrue(wuerfel.d6wuerfeln() >= 1, "kleiner als 1") # eigentlich sinnvoll: testen ob der Wuerfel wirklich zufaellig ist ... aber sehr aufwendig :-) if __name__ == '__main__': unittest.main(verbosity=0)
Aufruf mit ./test_wuerfel.py
stages: - test - run image: python:latest # Change pip's cache directory to be inside the project directory since we can # only cache local items. variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" # Pip's cache doesn't store the python packages # https://pip.pypa.io/en/stable/topics/caching/ # # If you want to also cache the installed packages, you have to install # them in a virtualenv and cache it as well. cache: paths: - .cache/pip - venv/ before_script: - TXT_RED="\e[31m" && TXT_CLEAR="\e[0m" - echo -e "${TXT_YELLOW}==== before_script START ====${TXT_CLEAR}" - python --version # For debugging - pip install virtualenv - virtualenv venv - source venv/bin/activate - echo -e "${TXT_YELLOW}==== before_script END ====${TXT_CLEAR}" lint: stage: test script: - pylint wuerfel.py - pylint test_wuerfel.py unit-test: stage: test script: - python test_wuerfel.py run: stage: run script: - python wuerfel.py
gilt für alle Tipps, Tricks & Spickzettel:
dies sind einfache, teils banale Notizen für meinen persönlichen Gebrauch,
die hier eher zufällig auch öffentlich lesbar sind
(vielleicht hilft es ja jemandem weiter). Verwendung auf eigene Gefahr
Fehler-Hinweise, Dankesschreiben , etc. bitte an: web.25@unixwitch.de
weitere Tools / Spickzettel