Update .gitlab-ci.yml file

This commit is contained in:
2025-11-13 22:10:53 +01:00
parent 53abc53591
commit 598c7ee7be

View File

@@ -1,6 +1,4 @@
stages: stages:
- install
- build
- deploy - deploy
variables: variables:
@@ -8,21 +6,22 @@ variables:
BUILD_DIR: dist BUILD_DIR: dist
# ----------------------------------------- # -----------------------------------------
# 1. Dependencies installieren # Staging: baut & deployed in einem Job
# ----------------------------------------- # -----------------------------------------
install: deploy:staging:
stage: install stage: deploy
image: node:20-bullseye image: node:20-bullseye
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
script: script:
- echo "📦 Installing deps..."
- corepack enable
- corepack prepare pnpm@9.12.0 --activate
- pnpm -v
- | - |
set -e
echo "📦 Install & Build (staging)..."
apt-get update && apt-get install -y lftp
corepack enable
corepack prepare pnpm@9.12.0 --activate
pnpm -v
if [ -f pnpm-lock.yaml ]; then if [ -f pnpm-lock.yaml ]; then
echo "pnpm-lock.yaml gefunden nutze --frozen-lockfile" echo "pnpm-lock.yaml gefunden nutze --frozen-lockfile"
pnpm install --frozen-lockfile --reporter=append-only pnpm install --frozen-lockfile --reporter=append-only
@@ -30,75 +29,23 @@ install:
echo "Keine pnpm-lock.yaml normales pnpm install" echo "Keine pnpm-lock.yaml normales pnpm install"
pnpm install --reporter=append-only pnpm install --reporter=append-only
fi fi
artifacts:
paths:
- node_modules/
expire_in: 1h
# ----------------------------------------- pnpm build
# 2. Projekt bauen
# ----------------------------------------- echo "📂 Build-Output (Top-Level):"
build: ls -la
stage: build echo "📂 Inhalt von ${BUILD_DIR}:"
image: node:20-bullseye
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
dependencies:
- install
script:
- echo "🏗️ Building..."
- corepack enable
- corepack prepare pnpm@9.12.0 --activate
- pnpm -v
- pnpm build
- echo "📂 Build-Output (Top-Level):"
- ls -la
- echo "📂 Inhalt von ${BUILD_DIR} (falls vorhanden):"
- |
if [ -d "${BUILD_DIR}" ]; then if [ -d "${BUILD_DIR}" ]; then
ls -la "${BUILD_DIR}" ls -la "${BUILD_DIR}"
else else
echo "⚠️ Verzeichnis ${BUILD_DIR} existiert NICHT!" echo " Verzeichnis ${BUILD_DIR} existiert NICHT Abbruch."
fi
- echo "✅ Build complete."
artifacts:
paths:
- ${BUILD_DIR}/
expire_in: 1 week
# -----------------------------------------
# 3a. Staging Deployment via FTPS
# -----------------------------------------
deploy:staging:
stage: deploy
image: alpine:3.20
dependencies:
- build
before_script:
- echo "📡 Installing lftp..."
- apk add --no-cache lftp
- echo "📂 Dateien im CI-Workspace vor Deploy:"
- pwd
- ls -la
- echo "📂 Inhalt von ${BUILD_DIR} im Deploy-Job:"
- |
if [ -d "${BUILD_DIR}" ]; then
ls -la "${BUILD_DIR}"
else
echo "❌ ${BUILD_DIR} existiert HIER nicht!"
fi
script:
- |
if [ ! -d "${BUILD_DIR}" ]; then
echo "❌ Abbruch: Build-Verzeichnis ${BUILD_DIR} fehlt im Deploy-Job."
exit 1 exit 1
fi fi
echo "🚀 Deploy via FTPS to ${FTP_HOST}:${FTP_PATH_STAGING} ..." echo "🚀 Deploy via FTPS to ${FTP_HOST}:${FTP_PATH_STAGING} ..."
lftp -e "set ftp:ssl-force true; set ftp:passive-mode true; set ftp:ssl-protect-data true; set ssl:verify-certificate no; open -u ${FTP_USER},${FTP_PASSWORD} ${FTP_HOST}; mirror -R --delete --parallel=4 ${BUILD_DIR}/ ${FTP_PATH_STAGING}; bye" lftp -e "set ftp:ssl-force true; set ftp:passive-mode true; set ftp:ssl-protect-data true; set ssl:verify-certificate no; open -u ${FTP_USER},${FTP_PASSWORD} ${FTP_HOST}; mirror -R --delete --parallel=4 ${BUILD_DIR}/ ${FTP_PATH_STAGING}; bye"
echo '✅ Deploy finished (staging).'
echo "✅ Deploy finished (staging)."
environment: environment:
name: staging name: staging
url: https://staging.usbcheck.it url: https://staging.usbcheck.it
@@ -107,36 +54,46 @@ deploy:staging:
- merge_requests - merge_requests
# ----------------------------------------- # -----------------------------------------
# 3b. Production Deployment via FTPS # Production: baut & deployed in einem Job
# ----------------------------------------- # -----------------------------------------
deploy:production: deploy:production:
stage: deploy stage: deploy
image: alpine:3.20 image: node:20-bullseye
dependencies: script:
- build
before_script:
- echo "📡 Installing lftp..."
- apk add --no-cache lftp
- echo "📂 Dateien im CI-Workspace vor Deploy:"
- pwd
- ls -la
- echo "📂 Inhalt von ${BUILD_DIR} im Deploy-Job:"
- | - |
set -e
echo "📦 Install & Build (production)..."
apt-get update && apt-get install -y lftp
corepack enable
corepack prepare pnpm@9.12.0 --activate
pnpm -v
if [ -f pnpm-lock.yaml ]; then
echo "pnpm-lock.yaml gefunden nutze --frozen-lockfile"
pnpm install --frozen-lockfile --reporter=append-only
else
echo "Keine pnpm-lock.yaml normales pnpm install"
pnpm install --reporter=append-only
fi
pnpm build
echo "📂 Build-Output (Top-Level):"
ls -la
echo "📂 Inhalt von ${BUILD_DIR}:"
if [ -d "${BUILD_DIR}" ]; then if [ -d "${BUILD_DIR}" ]; then
ls -la "${BUILD_DIR}" ls -la "${BUILD_DIR}"
else else
echo "❌ ${BUILD_DIR} existiert HIER nicht!" echo "❌ Verzeichnis ${BUILD_DIR} existiert NICHT Abbruch."
fi
script:
- |
if [ ! -d "${BUILD_DIR}" ]; then
echo "❌ Abbruch: Build-Verzeichnis ${BUILD_DIR} fehlt im Deploy-Job."
exit 1 exit 1
fi fi
echo "🚀 Deploy via FTPS to ${FTP_HOST}:${FTP_PATH_PROD} ..." echo "🚀 Deploy via FTPS to ${FTP_HOST}:${FTP_PATH_PROD} ..."
lftp -e "set ftp:ssl-force true; set ftp:passive-mode true; set ftp:ssl-protect-data true; set ssl:verify-certificate no; open -u ${FTP_USER},${FTP_PASSWORD} ${FTP_HOST}; mirror -R --delete --parallel=4 ${BUILD_DIR}/ ${FTP_PATH_PROD}; bye" lftp -e "set ftp:ssl-force true; set ftp:passive-mode true; set ftp:ssl-protect-data true; set ssl:verify-certificate no; open -u ${FTP_USER},${FTP_PASSWORD} ${FTP_HOST}; mirror -R --delete --parallel=4 ${BUILD_DIR}/ ${FTP_PATH_PROD}; bye"
echo '✅ Deploy finished (production).'
echo "✅ Deploy finished (production)."
environment: environment:
name: production name: production
url: https://www.usbcheck.it url: https://www.usbcheck.it