Add release/dev build scripts and branch-based deploy workflow
- scripts/release.sh: build from main, tag :latest + short SHA, push both. Aborts if not on main or working tree is dirty; warns on unpushed commits. Prevents dev states from becoming :latest. - scripts/dev-build.sh: local dev image (tagged per branch), never pushed -- keeps development builds off the registry. - docs/deployment.md: document branch/PR workflow, replace manual build/push steps with the scripts, SHA-based rollback now standard. - .gitattributes: force LF on *.sh so the shebang works on Windows. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
99dd052929
commit
94d9cac77b
4 files changed
+119
-30
No files matched your search
+39
-30
@@ -35,35 +35,44 @@ eingegeben werden muss.
|
||||
|
||||
---
|
||||
|
||||
## Arbeitsweise: Branches, nie direkt auf main
|
||||
|
||||
`main` ist der **veröffentlichte** Stand — nur daraus wird `:latest` gebaut, und
|
||||
nur `:latest` zieht Unraid. Deshalb wird nie direkt auf `main` committet:
|
||||
|
||||
1. Feature-Branch anlegen: `git switch -c <bereich>/<kurz>` (z.B.
|
||||
`deployment/sha-tagging`, `content/pipeline`).
|
||||
2. Dort committen, Branch pushen: `git push -u origin <branch>`.
|
||||
3. In Gitea einen **Pull Request** gegen `main` öffnen und dort mergen.
|
||||
4. Erst danach aus `main` das Release-Image bauen (unten).
|
||||
|
||||
**Dev-Images bleiben lokal.** Zum Ausprobieren auf dem eigenen Rechner:
|
||||
|
||||
```bash
|
||||
scripts/dev-build.sh # baut elternbeirat-web:dev-<branch>, pusht NICHTS
|
||||
```
|
||||
|
||||
So kann ein Entwicklungsstand nie versehentlich als `:latest` in der Registry
|
||||
landen.
|
||||
|
||||
## Neuen Stand ausrollen (Handbetrieb)
|
||||
|
||||
Alle Befehle auf dem Entwicklungsrechner (Docker installiert), im Repo-Root.
|
||||
|
||||
### 1. Image bauen
|
||||
Voraussetzung: einmalig an der Registry angemeldet (siehe unten). Dann, **auf
|
||||
main** und mit sauberem Arbeitsverzeichnis:
|
||||
|
||||
```bash
|
||||
docker build -t gitea.anticarnist.de/tom/elternbeirat:latest .
|
||||
scripts/release.sh
|
||||
```
|
||||
|
||||
Der Image-Pfad ist **kleingeschrieben** — Container-Registries verlangen das im
|
||||
Pfad, obwohl Benutzer (`Tom`) und Repo (`Elternbeirat`) großgeschrieben sind.
|
||||
Das Skript baut das Image, taggt es mit `:latest` **und** dem Commit-Kurz-SHA
|
||||
(für Rollback) und pusht beide. Es **bricht ab**, wenn du nicht auf `main` bist
|
||||
oder uncommittete Änderungen hast, und warnt bei ungepushten Commits.
|
||||
|
||||
### 2. An der Registry anmelden (einmalig, bis das Token wechselt)
|
||||
> Der Image-Pfad `gitea.anticarnist.de/tom/elternbeirat` ist **kleingeschrieben**
|
||||
> — Container-Registries verlangen das im Pfad, obwohl Benutzer (`Tom`) und Repo
|
||||
> (`Elternbeirat`) großgeschrieben sind.
|
||||
|
||||
```bash
|
||||
docker login gitea.anticarnist.de
|
||||
```
|
||||
|
||||
- **Username:** `Tom`
|
||||
- **Password:** das `package`-Token (nicht das Kontopasswort).
|
||||
|
||||
### 3. Image in die Registry pushen
|
||||
|
||||
```bash
|
||||
docker push gitea.anticarnist.de/tom/elternbeirat:latest
|
||||
```
|
||||
|
||||
### 4. Unraid einmalig an der Registry anmelden
|
||||
### Unraid einmalig an der Registry anmelden
|
||||
|
||||
Das Image ist **privat**, deshalb muss Unraid sich einmal anmelden, bevor es
|
||||
ziehen kann. Das **Compose Manager Plus**-Plugin hat dafür kein UI-Feld — der
|
||||
@@ -90,7 +99,7 @@ wechselt. Zwei erfahrungsgemäße Stolpersteine:
|
||||
`/root/.docker/config.json`. Auf dem eigenen Server für den Anfang okay.
|
||||
*Später sauberer:* einen Credential-Helper einrichten (→ offener Punkt unten).
|
||||
|
||||
### 5. Auf Unraid neu ziehen und starten
|
||||
### Auf Unraid neu ziehen und starten
|
||||
|
||||
Im **Compose Manager Plus**-Plugin (Unraid-Weboberfläche):
|
||||
|
||||
@@ -150,17 +159,17 @@ networks:
|
||||
|
||||
## Rollback
|
||||
|
||||
`:latest` allein macht Rollback unmöglich — deshalb sobald wir auf Gitea Actions
|
||||
umstellen (Schritt 10) **immer auch mit dem Commit-SHA taggen** und pushen:
|
||||
`scripts/release.sh` taggt jeden Release zusätzlich mit dem Commit-Kurz-SHA, der
|
||||
sich — anders als das wandernde `:latest` — nie verschiebt. Zum Zurückrollen in
|
||||
der Unraid-`compose.yaml` `:latest` durch `:<sha>` des letzten funktionierenden
|
||||
Stands ersetzen und neu hochfahren:
|
||||
|
||||
```bash
|
||||
docker build -t gitea.anticarnist.de/tom/elternbeirat:latest \
|
||||
-t gitea.anticarnist.de/tom/elternbeirat:<sha> .
|
||||
docker push gitea.anticarnist.de/tom/elternbeirat --all-tags
|
||||
```yaml
|
||||
image: gitea.anticarnist.de/tom/elternbeirat:99dd052 # statt :latest
|
||||
```
|
||||
|
||||
Zum Zurückrollen in der Unraid-`compose.yaml` `:latest` durch `:<sha>` des
|
||||
letzten funktionierenden Stands ersetzen und neu hochfahren.
|
||||
Welche SHA-Tags in der Registry liegen, zeigt Gitea unter
|
||||
`Tom/-/packages` → `elternbeirat`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in new issue
Block a user