This commit is contained in:
2025-11-24 02:32:26 +01:00
parent b2584bc828
commit 347d775f15
2 changed files with 279 additions and 107 deletions

209
.gitlab-ci (Kopie).yml Normal file
View File

@@ -0,0 +1,209 @@
stages:
- deploy
# -----------------------------------------
# Deployment auf STAGING
# -----------------------------------------
deploy:staging:
stage: deploy
image: alpine:3.20
before_script:
- echo "📡 Installing lftp..."
- apk add --no-cache lftp
- echo "📂 CI Workspace:"
- pwd
- ls -la
- echo "📂 Inhalt von src/:"
- ls -la src/ || echo "⚠️ src/ existiert nicht!"
- echo "📂 Inhalt von public/:"
- ls -la public/ || echo "⚠️ public/ existiert nicht!"
- echo "📂 Inhalt von config/:"
- ls -la config/ || echo "⚠️ config/ existiert nicht!"
- echo "📂 Inhalt von partials/:"
- ls -la partials/ || echo "⚠️ partials/ existiert nicht!"
- echo "📂 Inhalt von api/:"
- ls -la api/ || echo "⚠️ api/ existiert nicht!"
- echo "📂 Inhalt von config/staging/:"
- ls -la config/staging/ || echo "⚠️ config/staging/ existiert nicht!"
script:
- |
set -e
# Sicherstellen, dass Basisverzeichnisse existieren
for d in src public config config/staging; do
if [ ! -d "$d" ]; then
echo "❌ Verzeichnis '$d/' fehlt im Repo! Abbruch."
exit 1
fi
done
echo "🚀 Deploy STAGING → ${FTP_HOST}:${FTP_PATH_STAGING}"
echo "🔁 Sync src/ → ${FTP_PATH_STAGING}src/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep src/ ${FTP_PATH_STAGING}src/;
bye
"
echo "🔁 Sync api/ → ${FTP_PATH_STAGING}api/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep api/ ${FTP_PATH_STAGING}src/;
bye
"
echo "🔁 Sync public/ → ${FTP_PATH_STAGING}public/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep public/ ${FTP_PATH_STAGING}public/;
bye
"
echo "🔁 Sync partials/ → ${FTP_PATH_STAGING}partials/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep partials/ ${FTP_PATH_STAGING}partials/;
bye
"
echo "🔁 Sync config/staging/ (nur Inhalt) → ${FTP_PATH_STAGING}config/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
lcd config/staging;
mirror -R --delete --exclude .gitkeep ./ ${FTP_PATH_STAGING}config/;
bye
"
echo "✅ Deploy STAGING abgeschlossen."
environment:
name: staging
url: https://staging.usbcheck.it
only:
- develop
- merge_requests
# -----------------------------------------
# Deployment auf PRODUCTION
# -----------------------------------------
deploy:production:
stage: deploy
image: alpine:3.20
before_script:
- echo "📡 Installing lftp..."
- apk add --no-cache lftp
- echo "📂 CI Workspace:"
- pwd
- ls -la
- echo "📂 Inhalt von src/:"
- ls -la src/ || echo "⚠️ src/ existiert nicht!"
- echo "📂 Inhalt von public/:"
- ls -la public/ || echo "⚠️ public/ existiert nicht!"
- echo "📂 Inhalt von config/:"
- ls -la config/ || echo "⚠️ config/ existiert nicht!"
- echo "📂 Inhalt von partials/:"
- ls -la partials/ || echo "⚠️ partials/ existiert nicht!"
- echo "📂 Inhalt von api/:"
- ls -la api/ || echo "⚠️ api/ existiert nicht!"
- echo "📂 Inhalt von config/prod/:"
- ls -la config/prod/ || echo "⚠️ config/prod/ existiert nicht!"
script:
- |
set -e
# Sicherstellen, dass Basisverzeichnisse existieren
for d in src public config config/prod; do
if [ ! -d "$d" ]; then
echo "❌ Verzeichnis '$d/' fehlt im Repo! Abbruch."
exit 1
fi
done
echo "🚀 Deploy PRODUCTION → ${FTP_HOST}:${FTP_PATH_PROD}"
echo "🔁 Sync src/ → ${FTP_PATH_PROD}src/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep src/ ${FTP_PATH_PROD}src/;
bye
"
echo "🔁 Sync public/ → ${FTP_PATH_PROD}public/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep public/ ${FTP_PATH_PROD}public/;
bye
"
echo "🔁 Sync api/ → ${FTP_PATH_PROD}api/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep api/ ${FTP_PATH_PROD}public/;
bye
"
echo "🔁 Sync partials/ → ${FTP_PATH_PROD}partials/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep partials/ ${FTP_PATH_PROD}partials/;
bye
"
echo "🔁 Sync config/prod/ (nur Inhalt) → ${FTP_PATH_PROD}config/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
lcd config/prod;
mirror -R --delete --exclude .gitkeep ./ ${FTP_PATH_PROD}config/;
bye
"
echo "✅ Deploy PRODUCTION abgeschlossen."
environment:
name: production
url: https://www.usbcheck.it
only:
- main
# when: manual

View File

@@ -1,6 +1,13 @@
stages: stages:
- deploy - deploy
# -----------------------------------------
# Globale Variablen
# -----------------------------------------
variables:
BASE_DIRS: "src public api partials" # alle zu deployenden dirs
CONFIG_BASE_DIR: "config" # Basis-Konfigordner
# ----------------------------------------- # -----------------------------------------
# Deployment auf STAGING # Deployment auf STAGING
# ----------------------------------------- # -----------------------------------------
@@ -8,6 +15,10 @@ deploy:staging:
stage: deploy stage: deploy
image: alpine:3.20 image: alpine:3.20
variables:
TARGET_PATH: "${FTP_PATH_STAGING}"
CONFIG_ENV_DIR: "config/staging"
before_script: before_script:
- echo "📡 Installing lftp..." - echo "📡 Installing lftp..."
- apk add --no-cache lftp - apk add --no-cache lftp
@@ -16,72 +27,79 @@ deploy:staging:
- pwd - pwd
- ls -la - ls -la
- echo "📂 Inhalt von src/:" - echo "📁 Prüfe & zeige Projektverzeichnisse:"
- ls -la src/ || echo "⚠️ src/ existiert nicht!" - |
- echo "📂 Inhalt von public/:" for d in $BASE_DIRS $CONFIG_BASE_DIR $CONFIG_ENV_DIR; do
- ls -la public/ || echo "⚠️ public/ existiert nicht!" echo "----------------------------------------"
- echo "📂 Inhalt von config/:" if [ -d "$d" ]; then
- ls -la config/ || echo "⚠️ config/ existiert nicht!" echo "📂 Inhalt von $d/:"
- echo "📂 Inhalt von partials/:" ls -la "$d/"
- ls -la partials/ || echo "⚠️ partials/ existiert nicht!" else
- echo "📂 Inhalt von config/staging/:" echo "⚠️ Verzeichnis '$d' existiert nicht!"
- ls -la config/staging/ || echo "⚠️ config/staging/ existiert nicht!" fi
done
script: script: &deploy_script
- | - |
set -e set -e
# Sicherstellen, dass Basisverzeichnisse existieren echo "📁 Prüfe lokale Basisverzeichnisse..."
for d in src public config config/staging; do for d in $BASE_DIRS; do
if [ ! -d "$d" ]; then if [ ! -d "$d" ]; then
echo "❌ Verzeichnis '$d/' fehlt im Repo! Abbruch." echo "❌ Verzeichnis '$d/' fehlt im Repo! Abbruch."
exit 1 exit 1
fi fi
done done
echo "🚀 Deploy STAGING → ${FTP_HOST}:${FTP_PATH_STAGING}" if [ ! -d "$CONFIG_BASE_DIR" ]; then
echo "❌ Basis-Konfig-Verzeichnis '$CONFIG_BASE_DIR/' fehlt! Abbruch."
exit 1
fi
echo "🔁 Sync src/ → ${FTP_PATH_STAGING}src/" if [ ! -d "$CONFIG_ENV_DIR" ]; then
echo "❌ Env-Konfiguration '$CONFIG_ENV_DIR/' fehlt! Abbruch."
exit 1
fi
echo "📁 Erstelle Basisverzeichnisse auf FTP (falls nicht vorhanden)..."
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e " lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true; set ftp:ssl-force true;
set ftp:passive-mode true; set ftp:passive-mode true;
set ftp:ssl-protect-data true; set ftp:ssl-protect-data true;
set ssl:verify-certificate no; set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep src/ ${FTP_PATH_STAGING}src/; mkdir -p ${TARGET_PATH}${CONFIG_BASE_DIR};
$(for d in $BASE_DIRS; do echo "mkdir -p ${TARGET_PATH}${d};"; done)
bye bye
" "
echo "🔁 Sync public/ → ${FTP_PATH_STAGING}public/" echo "🚀 Deploy ${CI_ENVIRONMENT_NAME} → ${FTP_HOST}:${TARGET_PATH}"
# Dynamisches Syncen aller Verzeichnisse
for d in $BASE_DIRS; do
echo "🔁 Sync ${d}/ → ${TARGET_PATH}${d}/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --make-dirs --delete --exclude .gitkeep ${d}/ ${TARGET_PATH}${d}/;
bye
"
done
# Config separat behandeln
echo "🔁 Sync ${CONFIG_ENV_DIR}/ → ${TARGET_PATH}${CONFIG_BASE_DIR}/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e " lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true; set ftp:ssl-force true;
set ftp:passive-mode true; set ftp:passive-mode true;
set ftp:ssl-protect-data true; set ftp:ssl-protect-data true;
set ssl:verify-certificate no; set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep public/ ${FTP_PATH_STAGING}public/; lcd ${CONFIG_ENV_DIR};
bye mirror -R --make-dirs --delete --exclude .gitkeep ./ ${TARGET_PATH}${CONFIG_BASE_DIR}/;
"
echo "🔁 Sync partials/ → ${FTP_PATH_STAGING}partials/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep partials/ ${FTP_PATH_STAGING}partials/;
bye bye
" "
echo "🔁 Sync config/staging/ (nur Inhalt) → ${FTP_PATH_STAGING}config/" echo "✅ Deploy ${CI_ENVIRONMENT_NAME} abgeschlossen."
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
lcd config/staging;
mirror -R --delete --exclude .gitkeep ./ ${FTP_PATH_STAGING}config/;
bye
"
echo "✅ Deploy STAGING abgeschlossen."
environment: environment:
name: staging name: staging
@@ -99,81 +117,27 @@ deploy:production:
stage: deploy stage: deploy
image: alpine:3.20 image: alpine:3.20
variables:
TARGET_PATH: "${FTP_PATH_PROD}"
CONFIG_ENV_DIR: "config/prod"
before_script: before_script:
- echo "📡 Installing lftp..." - echo "📡 Installing lftp..."
- apk add --no-cache lftp - apk add --no-cache lftp
- echo "📂 CI Workspace:" - echo "📁 Prüfe & zeige Projektverzeichnisse:"
- pwd
- ls -la
- echo "📂 Inhalt von src/:"
- ls -la src/ || echo "⚠️ src/ existiert nicht!"
- echo "📂 Inhalt von public/:"
- ls -la public/ || echo "⚠️ public/ existiert nicht!"
- echo "📂 Inhalt von config/:"
- ls -la config/ || echo "⚠️ config/ existiert nicht!"
- echo "📂 Inhalt von partials/:"
- ls -la partials/ || echo "⚠️ partials/ existiert nicht!"
- echo "📂 Inhalt von config/prod/:"
- ls -la config/prod/ || echo "⚠️ config/prod/ existiert nicht!"
script:
- | - |
set -e for d in $BASE_DIRS $CONFIG_BASE_DIR $CONFIG_ENV_DIR; do
echo "----------------------------------------"
# Sicherstellen, dass Basisverzeichnisse existieren if [ -d "$d" ]; then
for d in src public config config/prod; do echo "📂 Inhalt von $d/:"
if [ ! -d "$d" ]; then ls -la "$d/"
echo "❌ Verzeichnis '$d/' fehlt im Repo! Abbruch." else
exit 1 echo "⚠️ Verzeichnis '$d' existiert nicht!"
fi fi
done done
echo "🚀 Deploy PRODUCTION → ${FTP_HOST}:${FTP_PATH_PROD}" script: *deploy_script
echo "🔁 Sync src/ → ${FTP_PATH_PROD}src/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep src/ ${FTP_PATH_PROD}src/;
bye
"
echo "🔁 Sync public/ → ${FTP_PATH_PROD}public/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep public/ ${FTP_PATH_PROD}public/;
bye
"
echo "🔁 Sync partials/ → ${FTP_PATH_PROD}partials/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
mirror -R --delete --exclude .gitkeep partials/ ${FTP_PATH_PROD}partials/;
bye
"
echo "🔁 Sync config/prod/ (nur Inhalt) → ${FTP_PATH_PROD}config/"
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
set ftp:ssl-force true;
set ftp:passive-mode true;
set ftp:ssl-protect-data true;
set ssl:verify-certificate no;
lcd config/prod;
mirror -R --delete --exclude .gitkeep ./ ${FTP_PATH_PROD}config/;
bye
"
echo "✅ Deploy PRODUCTION abgeschlossen."
environment: environment:
name: production name: production
@@ -181,4 +145,3 @@ deploy:production:
only: only:
- main - main
# when: manual