Files
usbcheck.it/.gitlab-ci.yml
2025-11-24 02:43:39 +01:00

138 lines
3.6 KiB
YAML

stages:
- deploy
# -----------------------------------------
# Globale Variablen
# -----------------------------------------
variables:
BASE_DIRS: "src public api partials" # alle zu deployenden dirs
CONFIG_BASE_DIR: "config" # Basis-Konfigordner
# -----------------------------------------
# Deployment auf STAGING
# -----------------------------------------
deploy:staging:
stage: deploy
image: alpine:3.20
variables:
TARGET_PATH: "${FTP_PATH_STAGING}"
CONFIG_ENV_DIR: "config/staging"
before_script:
- echo "📡 Installing lftp..."
- apk add --no-cache lftp
- echo "📂 CI Workspace:"
- pwd
- ls -la
- echo "📁 Prüfe & zeige Projektverzeichnisse:"
- |
for d in $BASE_DIRS $CONFIG_BASE_DIR $CONFIG_ENV_DIR; do
echo "----------------------------------------"
if [ -d "$d" ]; then
echo "📂 Inhalt von $d/:"
ls -la "$d/"
else
echo "⚠️ Verzeichnis '$d' existiert nicht!"
fi
done
script: &deploy_script
- |
set -e
echo "📁 Prüfe lokale Basisverzeichnisse..."
for d in $BASE_DIRS; do
if [ ! -d "$d" ]; then
echo "❌ Verzeichnis '$d/' fehlt im Repo! Abbruch."
exit 1
fi
done
if [ ! -d "$CONFIG_BASE_DIR" ]; then
echo "❌ Basis-Konfig-Verzeichnis '$CONFIG_BASE_DIR/' fehlt! Abbruch."
exit 1
fi
if [ ! -d "$CONFIG_ENV_DIR" ]; then
echo "❌ Env-Konfiguration '$CONFIG_ENV_DIR/' fehlt! Abbruch."
exit 1
fi
echo "🚀 Deploy ${CI_ENVIRONMENT_NAME} → ${FTP_HOST}:${TARGET_PATH}"
# Dynamisches Syncen aller Verzeichnisse aus BASE_DIRS
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: config/staging|prod → <TARGET_PATH>/config/
echo "🔁 Sync ${CONFIG_ENV_DIR}/ → ${TARGET_PATH}${CONFIG_BASE_DIR}/"
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_ENV_DIR};
mirror -R --make-dirs --delete --exclude .gitkeep ./ ${TARGET_PATH}${CONFIG_BASE_DIR}/;
bye
"
echo "✅ Deploy ${CI_ENVIRONMENT_NAME} abgeschlossen."
environment:
name: staging
url: https://staging.usbcheck.it
only:
- develop
- merge_requests
# -----------------------------------------
# Deployment auf PRODUCTION
# -----------------------------------------
deploy:production:
stage: deploy
image: alpine:3.20
variables:
TARGET_PATH: "${FTP_PATH_PROD}"
CONFIG_ENV_DIR: "config/prod"
before_script:
- echo "📡 Installing lftp..."
- apk add --no-cache lftp
- echo "📁 Prüfe & zeige Projektverzeichnisse:"
- |
for d in $BASE_DIRS $CONFIG_BASE_DIR $CONFIG_ENV_DIR; do
echo "----------------------------------------"
if [ -d "$d" ]; then
echo "📂 Inhalt von $d/:"
ls -la "$d/"
else
echo "⚠️ Verzeichnis '$d' existiert nicht!"
fi
done
script: *deploy_script
environment:
name: production
url: https://www.usbcheck.it
only:
- main
# when: manual # optional wieder aktivierbar