99 lines
2.6 KiB
YAML
99 lines
2.6 KiB
YAML
stages:
|
|
- check
|
|
- build
|
|
- package
|
|
- deploy
|
|
|
|
variables:
|
|
DOCKER_REGISTRY: "docker.io"
|
|
DOCKER_USERNAME: "$DOCKERHUB_USER" # c'est dans gitlab Setting -> CI -> Variable
|
|
DOCKER_PASSWORD: "$DOCKERHUB_TOKEN" # IDEM mais j'ai caché mon token
|
|
IMAGE_BACKEND: "docker.io/benarbause/doodleback-with-quarkus:latest"
|
|
IMAGE_FRONTEND: "docker.io/vuminh224/doodle-frontend:latest"
|
|
APP_REPO: "https://github.com/barais/doodlestudent.git"
|
|
SUBMODULE_PATH: "doodlestudent"
|
|
|
|
check_app_update:
|
|
stage: check
|
|
image: alpine/git:latest
|
|
script:
|
|
# Récupère le dernier commit distant
|
|
- LATEST_REMOTE=$(git ls-remote $APP_REPO HEAD | awk '{print $1}')
|
|
# Récupère le commit actuel du submodule
|
|
- CURRENT_SUBMODULE=$(git rev-parse HEAD:$SUBMODULE_PATH || echo "none")
|
|
# Compare
|
|
- |
|
|
if [ "$LATEST_REMOTE" != "$CURRENT_SUBMODULE" ]; then
|
|
echo "NEW_COMMIT=true" >> variables.env
|
|
else
|
|
echo "NEW_COMMIT=false" >> variables.env
|
|
fi
|
|
artifacts:
|
|
paths:
|
|
- variables.env
|
|
|
|
# Build Frontend (Angular)
|
|
build_frontend:
|
|
stage: build
|
|
image: node:alpine3.23
|
|
dependencies:
|
|
- check_app_update
|
|
script:
|
|
- source variables.env || true
|
|
- if [ "$NEW_COMMIT" != "true" ]; then
|
|
echo "No new commit, skipping build";
|
|
exit 0;
|
|
fi
|
|
- git clone https://github.com/barais/doodlestudent.git doodlestudent
|
|
- ls -la doodlestudent/front #test
|
|
- cd doodlestudent/front
|
|
- npm ci
|
|
- npm run build --prod
|
|
artifacts:
|
|
paths:
|
|
- doodlestudent/front/dist/
|
|
|
|
|
|
# Build & Push Docker frontend
|
|
build_docker_frontend:
|
|
stage: package
|
|
image: docker:latest
|
|
services:
|
|
- docker:dind
|
|
dependencies:
|
|
- build_frontend
|
|
rules:
|
|
- if: '$NEW_COMMIT == "true"'
|
|
script:
|
|
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
|
|
- docker build -t "$IMAGE_FRONTEND" doodlestudent/front
|
|
- docker push "$IMAGE_FRONTEND"
|
|
- docker logout
|
|
|
|
# Deploy to Production
|
|
deploy_production:
|
|
stage: deploy
|
|
image: alpine:latest
|
|
dependencies:
|
|
- build_docker_frontend
|
|
rules:
|
|
- if: '$NEW_COMMIT == "true"'
|
|
before_script:
|
|
- apk add --no-cache openssh-client docker-cli
|
|
- mkdir -p ~/.ssh
|
|
- chmod 700 ~/.ssh
|
|
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
|
|
- chmod 600 ~/.ssh/id_rsa
|
|
- ssh-keyscan -H "$DEPLOY_SERVER" >> ~/.ssh/known_hosts 2>/dev/null || true
|
|
script:
|
|
- |
|
|
ssh "$DEPLOY_USER@$DEPLOY_SERVER" << 'EOF'
|
|
cd /app
|
|
docker compose pull
|
|
docker compose up -d
|
|
EOF
|
|
#environment:
|
|
#name: production
|
|
#url: http://127.0.0.1
|
|
when: manual
|