This commit is contained in:
@@ -26,22 +26,45 @@ jobs:
|
|||||||
- name: Bei der Registry anmelden
|
- name: Bei der Registry anmelden
|
||||||
run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin
|
run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin
|
||||||
|
|
||||||
- name: Image-Namen und Tag bestimmen
|
# Die Versionsnummer kommt aus der Datei VERSION im Repo-Root (z.B.
|
||||||
|
# "1.4.0") - vor einem Release dort einfach den Wert erhoehen.
|
||||||
|
#
|
||||||
|
# Tags je nach Push:
|
||||||
|
# - Branch main -> :latest und :v<VERSION>
|
||||||
|
# - Branch Dev -> :dev und :v<VERSION>-dev
|
||||||
|
# - Branch beta -> :beta und :v<VERSION>-beta
|
||||||
|
# - Git-Tag "v1.4.0" -> genau :v1.4.0 (expliziter Versions-Release)
|
||||||
|
# - immer zusaetzlich -> :<commit-sha> (exakte Nachverfolgung)
|
||||||
|
- name: Image-Namen und Tags bestimmen
|
||||||
id: vars
|
id: vars
|
||||||
run: |
|
run: |
|
||||||
IMAGE=${{ env.REGISTRY }}/${{ github.repository }}
|
IMAGE=${{ env.REGISTRY }}/${{ github.repository }}
|
||||||
if [ "${{ github.ref_name }}" = "main" ]; then
|
VERSION=$(tr -d '[:space:]' < VERSION)
|
||||||
TAG=latest
|
|
||||||
|
if [ "${{ github.ref_type }}" = "tag" ]; then
|
||||||
|
TAGS="${{ github.ref_name }}"
|
||||||
|
elif [ "${{ github.ref_name }}" = "main" ]; then
|
||||||
|
TAGS="latest v${VERSION}"
|
||||||
else
|
else
|
||||||
TAG=$(echo "${{ github.ref_name }}" | tr '[:upper:]' '[:lower:]')
|
BRANCH=$(echo "${{ github.ref_name }}" | tr '[:upper:]' '[:lower:]')
|
||||||
|
TAGS="${BRANCH} v${VERSION}-${BRANCH}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "image=$IMAGE" >> "$GITHUB_OUTPUT"
|
echo "image=$IMAGE" >> "$GITHUB_OUTPUT"
|
||||||
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
echo "tags=$TAGS" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Ermittelte Tags: $TAGS"
|
||||||
|
|
||||||
- name: Image bauen
|
- name: Image bauen
|
||||||
run: docker build -t ${{ steps.vars.outputs.image }}:${{ steps.vars.outputs.tag }} -t ${{ steps.vars.outputs.image }}:${{ github.sha }} .
|
run: |
|
||||||
|
BUILD_ARGS=""
|
||||||
|
for TAG in ${{ steps.vars.outputs.tags }}; do
|
||||||
|
BUILD_ARGS="$BUILD_ARGS -t ${{ steps.vars.outputs.image }}:${TAG}"
|
||||||
|
done
|
||||||
|
docker build $BUILD_ARGS -t ${{ steps.vars.outputs.image }}:${{ github.sha }} .
|
||||||
|
|
||||||
- name: Image pushen
|
- name: Image pushen
|
||||||
run: |
|
run: |
|
||||||
docker push ${{ steps.vars.outputs.image }}:${{ steps.vars.outputs.tag }}
|
for TAG in ${{ steps.vars.outputs.tags }}; do
|
||||||
|
docker push ${{ steps.vars.outputs.image }}:${TAG}
|
||||||
|
done
|
||||||
docker push ${{ steps.vars.outputs.image }}:${{ github.sha }}
|
docker push ${{ steps.vars.outputs.image }}:${{ github.sha }}
|
||||||
@@ -43,15 +43,33 @@ bestehende Postgres-Datenbank mit Daten, dann:
|
|||||||
|
|
||||||
## Bauen und Verteilen als Container
|
## Bauen und Verteilen als Container
|
||||||
|
|
||||||
Bei jedem Push nach `main` bzw. auf einen `v*`-Tag baut die Gitea-Actions-
|
Bei jedem Push auf `main`, `Dev`, `beta` oder einen `v*`-Tag baut die
|
||||||
Pipeline (`.gitea/workflows/build.yml`) automatisch ein Image und pusht es in
|
Gitea-Actions-Pipeline (`.gitea/workflows/build.yml`) automatisch ein Image
|
||||||
die Gitea-Registry (getaggt als `:latest` und mit dem Commit-Hash).
|
und pusht es in die Gitea-Registry. Welche Tags dabei entstehen, hängt vom
|
||||||
|
Branch ab:
|
||||||
|
|
||||||
|
| Push auf … | Image-Tags |
|
||||||
|
|--------------------|--------------------------------------|
|
||||||
|
| `main` | `:latest` und `:v<VERSION>` |
|
||||||
|
| `Dev` | `:dev` und `:v<VERSION>-dev` |
|
||||||
|
| `beta` | `:beta` und `:v<VERSION>-beta` |
|
||||||
|
| Git-Tag `v1.4.0` | genau `:v1.4.0` |
|
||||||
|
|
||||||
|
Zusätzlich wird bei jedem Build immer auch `:<commit-sha>` gepusht, für die
|
||||||
|
exakte Nachverfolgung einzelner Builds.
|
||||||
|
|
||||||
|
`<VERSION>` kommt aus der Datei `VERSION` im Repo-Root (aktuell `1.0.0`).
|
||||||
|
Vor einem Release dort einfach die Zahl erhöhen und committen – die Pipeline
|
||||||
|
liest den Wert automatisch bei jedem Build neu ein, es ist keine weitere
|
||||||
|
Konfiguration nötig.
|
||||||
|
|
||||||
Für einen **anderen Server**, der nur das fertige Image ziehen und selbst
|
Für einen **anderen Server**, der nur das fertige Image ziehen und selbst
|
||||||
nichts bauen soll, gibt es `docker-compose.deploy.yml`: sie referenziert das
|
nichts bauen soll, gibt es `docker-compose.deploy.yml`: sie referenziert das
|
||||||
Image direkt aus der Registry (`image: git.thiede-brauer.de/bryan.hoffmann/wdm:latest`,
|
Image direkt aus der Registry (`image: git.thiede-brauer.de/bryan.hoffmann/wdm:latest`,
|
||||||
kein `build:`). Auf diesem Server reicht allein diese eine Datei – der Rest
|
kein `build:`). Auf diesem Server reicht allein diese eine Datei – der Rest
|
||||||
des Repos wird dort nicht benötigt:
|
des Repos wird dort nicht benötigt. Statt `:latest` kann dort auch gezielt
|
||||||
|
ein Versions-Tag (z.B. `:v1.4.0`) oder `:dev`/`:beta` eingetragen werden, um
|
||||||
|
eine bestimmte Version bzw. einen bestimmten Entwicklungsstand zu deployen:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker login git.thiede-brauer.de -u <benutzername> # falls die Registry nicht öffentlich lesbar ist
|
docker login git.thiede-brauer.de -u <benutzername> # falls die Registry nicht öffentlich lesbar ist
|
||||||
@@ -238,7 +256,8 @@ wdm/
|
|||||||
├── Dockerfile Build-Anweisungen (Kontext = Projektwurzel)
|
├── Dockerfile Build-Anweisungen (Kontext = Projektwurzel)
|
||||||
├── docker-compose.yml lokal bauen/testen (build: .)
|
├── docker-compose.yml lokal bauen/testen (build: .)
|
||||||
├── docker-compose.deploy.yml nur Image ziehen (für andere Server)
|
├── docker-compose.deploy.yml nur Image ziehen (für andere Server)
|
||||||
├── .gitea/workflows/build.yml CI: baut Image und pusht in die Gitea-Registry
|
├── .gitea/workflows/build.yml CI: baut Image (branch-/versionsabhängig getaggt) und pusht in die Gitea-Registry
|
||||||
|
├── VERSION aktuelle Versionsnummer (z.B. "1.0.0"), von der CI-Pipeline gelesen
|
||||||
├── README.md
|
├── README.md
|
||||||
└── build/
|
└── build/
|
||||||
├── app.py Flask-Anwendung (alle Routen, Server-Side-Rendering)
|
├── app.py Flask-Anwendung (alle Routen, Server-Side-Rendering)
|
||||||
@@ -251,4 +270,4 @@ wdm/
|
|||||||
```
|
```
|
||||||
|
|
||||||
Wichtig: `docker compose` muss aus dem Projektwurzel-Verzeichnis heraus
|
Wichtig: `docker compose` muss aus dem Projektwurzel-Verzeichnis heraus
|
||||||
aufgerufen werden (dort, wo `docker-compose.yml` liegt), nicht aus `build/`.
|
aufgerufen werden (dort, wo `docker-compose.yml` liegt), nicht aus `build/`.
|
||||||
Reference in New Issue
Block a user