diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..fdf9c7f --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,74 @@ +stages: + - build + - deploy + +variables: + DOCKER_IMAGE: silverlabs-website + +# Use Docker image +image: docker:latest + +# Build Docker image +build:website: + stage: build + services: + - docker:dind + script: + - echo "Building SilverLabs Website Docker image..." + - docker build -t $DOCKER_IMAGE:latest -t $DOCKER_IMAGE:${CI_COMMIT_SHORT_SHA} . + - docker images + tags: + - docker + only: + - master + - main + +# Deploy to production server (PORTAINER-01) +deploy:production: + stage: deploy + image: docker:latest + services: + - docker:dind + dependencies: + - build:website + before_script: + - apk add --no-cache sshpass openssh-client + script: + - echo "🚀 Deploying SilverLabs Website to silverlabs.uk (PORTAINER-01)" + + # Build Docker image + - docker build -t $DOCKER_IMAGE:latest -t $DOCKER_IMAGE:${CI_COMMIT_SHORT_SHA} . + + # Save and transfer image to server + - docker save $DOCKER_IMAGE:latest | gzip > /tmp/$DOCKER_IMAGE-image.tar.gz + - sshpass -p "Phenom12#." scp -o StrictHostKeyChecking=no /tmp/$DOCKER_IMAGE-image.tar.gz sysadmin@10.0.0.51:/tmp/ + + # Deploy on server + - | + sshpass -p "Phenom12#." ssh -o StrictHostKeyChecking=no sysadmin@10.0.0.51 << 'ENDSSH' + cd /opt/silverlabs/website + docker load < /tmp/$DOCKER_IMAGE-image.tar.gz + + # Stop and remove old container + docker stop silverlabs-website 2>/dev/null || true + docker rm silverlabs-website 2>/dev/null || true + + # Start new container + docker run -d \ + --name silverlabs-website \ + --restart unless-stopped \ + -p 8100:80 \ + silverlabs-website:latest + + docker ps | grep silverlabs-website + rm /tmp/silverlabs-website-image.tar.gz + echo "✅ Deployment complete!" + ENDSSH + environment: + name: production + url: https://silverlabs.uk + only: + - master + - main + tags: + - docker