From f870e29edf7fb9935e15908281527ccb4affb3fa Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Mon, 17 Nov 2025 00:46:07 +0100 Subject: [PATCH] Add new file --- .gitlab-ci.yml | 161 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..53fb306 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,161 @@ +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 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 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 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 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 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