Simples deployment via git

Simples deployment via git

Das Problem

Egal ob Homepage, Konfigurationsdateien oder Programmcode: Für praktisch alle Projekte verwendet man heute git.

Möchte man jedoch Versionen automatisch ausrollen (z.B. statische HTML Dateien einer Webseite), benötigt man einige Skripte oder einen Build-Dienst wie z.B. Gitlab-CI, Jenkins oder CircleCI.

Oftmals reicht es jedoch die Daten auf das Zielsystem zu kopieren. Aber auch das geht mit git:

Ausgangssituation

Wie haben einen Server (für die Homepage), einen Laptop (für die Entwicklungsarbeit), sowie ein Git-Projekt (z.B. bei Github). Auf Github befindet sich unser Projekt. Auf Laptop wie auch auf dem Server haben wir uns mit git clone das Projekt eingerichtet.

Geräte unter eigenem Namen: udev rules

Geräte unter eigenem Namen: udev rules

Das Problem

Unter Linux wird jedem verbundenen Gerät ein Pfad zugeordnet. So erscheint z.B. ein verbundener Esp8266 Microcontroller als (serielle) Schnittstelle /dev/ttyUSB0. Sind noch mehr Geräte verbunden, so erscheinen diese als /dev/ttyUSB1, /dev/ttyUSB2 usw.

Welches Gerät ist aber nun welche Schnittstelle? Und sind diese nach dem Reboot noch gleich?

Die Lösung: udev rules

Um dies sicher zu stellen erstellt man eine Regel mit udev:

Zunächst identifizieren wir, welches Gerät wir haben wollen. Als Beispiel nutzen wir hier einen Microcontroller, der unter /dev/ttyUSB0 eingehängt ist.

Dateien finden mit fd

Dateien finden mit fd

Das Tool find ist ein praktisches Programm und Dateien und Ordner zu finden. Find kann aber auch komplexere Aktionen wie z.B. mehrere Dateien konvertieren. Leider ist es jedoch nicht allzu einsteigerfreundlich.

Hier kommt fd ins Spiel:

Das Open-Source Programm erledigt nahezu alle Aufgaben von find, ist aber einfacher zu bedienen.

Beispiel1

Finde alle Dateien mit der Zeichenfolge schuh im Namen:

find:

find . -iname '*schuh*'

fd:

fd schuh

Beispiel 2

Finde alle .jpg Dateien:

Skripte schöner abbrechen

Skripte schöner abbrechen

Statt jede Zeile eines Shell-Skripts auf korrekte Ausführung zu überprüfen und gegebenenfalls abzubrechen, hilft folgendes:

#!/usr/bin/env bash
set -Eeuo pipefail

Diese Zeile führt beim Fehlerfall einer Zeile zum Abbruch des gesamten Skripts. Praktisch!

Docker services via docker-compose und systemd template

Docker services via docker-compose und systemd template

Docker ist das derzeit omnipresente Werkzeug um Dienste in Containern auszuführen.

Wie kann man jedoch einen logischen Verbund an Diensten mit dem System zusammen starten?

Mit der Hilfe von Docker können Anforderungen eines Dienstes (z.B. Gitlab) an die Distribution innerhalb eines Containers befriedigt werden. Das ausführende System aussenherum bleibt davon unberührt und kann auch eine inkompatible Distribution sein.

In der Praxis werden jedoch oft mehrere Dienste in einem Verbund benötigt. Diese können mit dem Tool docker-compose beschrieben und gestartet werden.