ci: deploy mag niet stranden op een .env van een andere gebruiker
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 1m30s
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 1m30s
De stap "Instellingen en versie klaarzetten" faalde op `touch: cannot touch '.env': Permission denied`. Het bestand was met sudo aangemaakt en dus van root, terwijl de runner als een gewone gebruiker draait. Daarmee brak de hele deploy af op iets dat geen blokkade hoort te zijn. - SU_TAG wordt nu altijd via de omgeving aan `docker compose` meegegeven (export SU_TAG). Het wegschrijven in .env blijft de voorkeur, omdat het een handmatige `docker compose up` overleeft, maar het is niet meer nodig om te kunnen deployen. - Is .env niet schrijfbaar, dan meldt de log wie de eigenaar is en welk chown-commando dat rechtzet, en loopt de deploy gewoon door. - Het aanmaken vanuit .env.example faalt niet meer hard. Positief neveneffect van de vorige fix: de log toont nu "Werkmap: /opt/docker/server-up", dus de cd landt op de juiste plek. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
This commit is contained in:
parent
cb04c4a7ad
commit
34a48fb74a
3 changed files with 49 additions and 26 deletions
|
|
@ -85,24 +85,37 @@ jobs:
|
||||||
# SU_TAG vastleggen zodat compose en de "Nu bijwerken"-knop in de app
|
# SU_TAG vastleggen zodat compose en de "Nu bijwerken"-knop in de app
|
||||||
# naar hetzelfde image wijzen (zie docs/updates.md).
|
# naar hetzelfde image wijzen (zie docs/updates.md).
|
||||||
#
|
#
|
||||||
# Bestaat er nog geen .env, dan zetten we hem op vanuit .env.example,
|
# SU_TAG bepaalt welk image compose start. We schrijven dat bij
|
||||||
# zodat BIND, PORT en SU_IMAGE zichtbaar en instelbaar zijn. Een
|
# voorkeur in .env zodat het een handmatige `docker compose up`
|
||||||
# bestaande .env blijft ongemoeid; rsync slaat hem over.
|
# overleeft, maar dat bestand kan van een andere gebruiker zijn (bv.
|
||||||
|
# met sudo aangemaakt). Lukt schrijven niet, dan geven we SU_TAG mee
|
||||||
|
# via de omgeving: compose gebruikt die en de deploy loopt gewoon door.
|
||||||
if [ ! -f .env ] && [ -f .env.example ]; then
|
if [ ! -f .env ] && [ -f .env.example ]; then
|
||||||
cp .env.example .env
|
cp .env.example .env 2>/dev/null \
|
||||||
echo "Nieuwe .env aangemaakt vanuit .env.example"
|
&& echo "Nieuwe .env aangemaakt vanuit .env.example" \
|
||||||
|
|| echo "LET OP: kon geen .env aanmaken in $(pwd)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -w .env ] || { [ ! -e .env ] && [ -w . ]; }; then
|
||||||
|
touch .env
|
||||||
|
sed -i '/^SU_TAG=/d' .env
|
||||||
|
echo "SU_TAG=${VERSION}" >> .env
|
||||||
|
echo "Inhoud van $(pwd)/.env:"
|
||||||
|
grep -vE '^\s*(#|$)' .env | sed 's/^/ /'
|
||||||
|
else
|
||||||
|
echo "LET OP: $(pwd)/.env is niet schrijfbaar voor $(id -un)."
|
||||||
|
echo " Eigenaar: $(stat -c '%U:%G %a' .env 2>/dev/null || echo onbekend)"
|
||||||
|
echo " Herstel eenmalig met:"
|
||||||
|
echo " sudo chown $(stat -c '%U:%G' . ) $(pwd)/.env"
|
||||||
|
echo " SU_TAG wordt nu via de omgeving meegegeven."
|
||||||
fi
|
fi
|
||||||
touch .env
|
|
||||||
sed -i '/^SU_TAG=/d' .env
|
|
||||||
echo "SU_TAG=${VERSION}" >> .env
|
|
||||||
echo "Inhoud van $(pwd)/.env:"
|
|
||||||
grep -vE '^\s*(#|$)' .env | sed 's/^/ /'
|
|
||||||
|
|
||||||
# Draait deze server vanaf de registry (SU_IMAGE in .env), dan bouwen
|
# Draait deze server vanaf de registry (SU_IMAGE in .env), dan bouwen
|
||||||
# we hier én pushen we het resultaat, zodat de in-app updateknop het
|
# we hier én pushen we het resultaat, zodat de in-app updateknop het
|
||||||
# image kan ophalen. Bouwen en pushen zitten bewust in dezelfde job:
|
# image kan ophalen. Bouwen en pushen zitten bewust in dezelfde job:
|
||||||
# een aparte build-workflow zou met deze deploy om de runner strijden.
|
# een aparte build-workflow zou met deze deploy om de runner strijden.
|
||||||
SU_IMAGE="$(grep -E '^SU_IMAGE=' .env | cut -d= -f2- || true)"
|
export SU_TAG="${VERSION}"
|
||||||
|
SU_IMAGE="$(grep -E '^SU_IMAGE=' .env 2>/dev/null | cut -d= -f2- || true)"
|
||||||
docker compose build --pull
|
docker compose build --pull
|
||||||
|
|
||||||
if [ -n "$SU_IMAGE" ]; then
|
if [ -n "$SU_IMAGE" ]; then
|
||||||
|
|
@ -128,6 +141,7 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
cd "$DEPLOY_DIR"
|
cd "$DEPLOY_DIR"
|
||||||
|
export SU_TAG="${VERSION}"
|
||||||
docker compose up -d --remove-orphans
|
docker compose up -d --remove-orphans
|
||||||
docker compose ps
|
docker compose ps
|
||||||
echo "Compose-projectmap volgens de container:"
|
echo "Compose-projectmap volgens de container:"
|
||||||
|
|
|
||||||
|
|
@ -81,28 +81,36 @@ jobs:
|
||||||
|
|
||||||
echo "${VERSION}" > VERSION
|
echo "${VERSION}" > VERSION
|
||||||
|
|
||||||
# De dev-server bouwt altijd zelf vanaf de dev-branch. SU_TAG vastleggen
|
# SU_TAG bepaalt welk image compose start. We schrijven dat bij
|
||||||
# zodat compose exact het zojuist gebouwde image start.
|
# voorkeur in .env zodat het een handmatige `docker compose up`
|
||||||
#
|
# overleeft, maar dat bestand kan van een andere gebruiker zijn (bv.
|
||||||
# Bestaat er nog geen .env, dan zetten we hem op vanuit .env.example.
|
# met sudo aangemaakt). Lukt schrijven niet, dan geven we SU_TAG mee
|
||||||
# Zo staat er een leesbaar bestand met alle instellingen erin (BIND,
|
# via de omgeving: compose gebruikt die en de deploy loopt gewoon door.
|
||||||
# PORT, SU_IMAGE) in plaats van alleen een kale SU_TAG-regel. Een
|
|
||||||
# bestaande .env blijft ongemoeid; rsync slaat hem over.
|
|
||||||
if [ ! -f .env ] && [ -f .env.example ]; then
|
if [ ! -f .env ] && [ -f .env.example ]; then
|
||||||
cp .env.example .env
|
cp .env.example .env 2>/dev/null \
|
||||||
echo "Nieuwe .env aangemaakt vanuit .env.example"
|
&& echo "Nieuwe .env aangemaakt vanuit .env.example" \
|
||||||
|
|| echo "LET OP: kon geen .env aanmaken in $(pwd)"
|
||||||
fi
|
fi
|
||||||
touch .env
|
|
||||||
sed -i '/^SU_TAG=/d' .env
|
|
||||||
echo "SU_TAG=${VERSION}" >> .env
|
|
||||||
|
|
||||||
echo "Inhoud van $(pwd)/.env:"
|
if [ -w .env ] || { [ ! -e .env ] && [ -w . ]; }; then
|
||||||
grep -vE '^\s*(#|$)' .env | sed 's/^/ /'
|
touch .env
|
||||||
|
sed -i '/^SU_TAG=/d' .env
|
||||||
|
echo "SU_TAG=${VERSION}" >> .env
|
||||||
|
echo "Inhoud van $(pwd)/.env:"
|
||||||
|
grep -vE '^\s*(#|$)' .env | sed 's/^/ /'
|
||||||
|
else
|
||||||
|
echo "LET OP: $(pwd)/.env is niet schrijfbaar voor $(id -un)."
|
||||||
|
echo " Eigenaar: $(stat -c '%U:%G %a' .env 2>/dev/null || echo onbekend)"
|
||||||
|
echo " Herstel eenmalig met:"
|
||||||
|
echo " sudo chown $(stat -c '%U:%G' . ) $(pwd)/.env"
|
||||||
|
echo " SU_TAG wordt nu via de omgeving meegegeven."
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Build image
|
- name: Build image
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
cd "$DEPLOY_DIR"
|
cd "$DEPLOY_DIR"
|
||||||
|
export SU_TAG="${VERSION}"
|
||||||
docker compose build --pull
|
docker compose build --pull
|
||||||
docker tag "server-up:${VERSION}" "server-up:${CHANNEL}" || true
|
docker tag "server-up:${VERSION}" "server-up:${CHANNEL}" || true
|
||||||
|
|
||||||
|
|
@ -110,6 +118,7 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
cd "$DEPLOY_DIR"
|
cd "$DEPLOY_DIR"
|
||||||
|
export SU_TAG="${VERSION}"
|
||||||
docker compose up -d --remove-orphans
|
docker compose up -d --remove-orphans
|
||||||
docker compose ps
|
docker compose ps
|
||||||
# Waar draait de container vandaan, en op welk adres luistert hij?
|
# Waar draait de container vandaan, en op welk adres luistert hij?
|
||||||
|
|
|
||||||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
0.5.45-beta
|
0.5.46-beta
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue