Conduit-Pipeline mit GitHub Actions
Dieses Repository baut auf diesem Conduit-Projekt auf und ergänzt eine CI/CD-Pipeline.
Die Pipeline in GitHub Actions automatisiert das Klonen des Repositories, das Bauen der Docker-Images und das Ausrollen der Anwendung auf einen entfernten Server per Docker Compose.
Inhalt
Auslöser
Der Workflow startet unter diesen Bedingungen:
-
Manuell (workflow_dispatch): Der Workflow kann im GitHub-Actions-Dashboard von Hand gestartet werden. -
Push auf den main-Branch: Ein Commit auf main startet den Workflow automatisch. -
Workflow-Aufruf: Der Workflow kann aus anderen Workflows aufgerufen werden und braucht dann bestimmte Secrets:SSH_PRIVATE_KEY: der private SSH-Key für den Zugriff auf den entfernten Server.REMOTE_HOST: IP-Adresse oder Hostname des entfernten Servers.REMOTE_USER: Benutzername auf dem entfernten Server.TARGET: Zielverzeichnis auf dem entfernten Server, in das die Dateien geladen werden.
Überblick
Der Workflow besteht aus zwei Jobs (auf Basis bestehender GitHub Actions):
-
Build-Job: baut die Docker-Images für Frontend und Backend und pusht sie in eine Registry, hier die GitHub Container Registry.
-
Deploy-Job: rollt die Anwendung auf den entfernten Server aus. Die nötigen Artefakte (
.env,docker-compose.yaml) werden übertragen, und die Anwendung wird dort per Docker Compose gestartet.
Schritte im Build-Job:
- Repository klonen mit actions/checkout, um den aktuellen Code zu holen
- Docker Buildx einrichten mit docker/setup-buildx-action für erweiterte Build-Funktionen
- An GHCR anmelden mit docker/login-action
- Metadaten ziehen mit docker/metadata-action
- Die
.envaus derexample.envdes Repositories erzeugen - Frontend- und Backend-Image bauen und pushen mit docker/build-push-action
- Deployment-Artefakte hochladen mit actions/download-artifact (
.envunddocker-compose.yaml)
Schritte im Deploy-Job:
- Repository klonen mit actions/checkout, um den aktuellen Code zu holen
- Deployment-Artefakte herunterladen mit actions/download-artifact
- Dateien per SCP übertragen mit appleboy/scp-action, um
.envunddocker-compose.yamlauf den Server zu kopieren - Ausrollen per SSH mit appleboy/ssh-action:
- alte Container stoppen:
docker compose down --remove-orphans - unbenutzte Ressourcen aufräumen:
docker system prune -af - Container starten:
docker compose up -d
- alte Container stoppen:
Benötigte Secrets:
SSH_PRIVATE_KEY: privater SSH-Key für die Anmeldung am entfernten Server.REMOTE_HOST: IP-Adresse oder Domain des entfernten Servers.REMOTE_USER: Benutzername für den Zugriff auf den Server.TARGET: Zielverzeichnis auf dem Server, in das ausgerollt wird.GHCR_PAT: ein GitHub Personal Access Token für die Anmeldung an der GitHub Container Registry.
Repository: https://github.com/PascalNehlsen/conduit