ci: Add GitLab CI/CD pipeline for automated Docker deployment
Added CI/CD pipeline with: - Build stage: Creates Docker image from website files - Deploy stage: Deploys to production server (PORTAINER-01) - Automatic deployment on master/main branch - Container runs on port 8100 mapped to internal port 80 - Available at https://silverlabs.uk Pipeline deploys to: - Server: 10.0.0.51 (PORTAINER-01) - Port: 8100 - Docker container: silverlabs-website 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
74
.gitlab-ci.yml
Normal file
74
.gitlab-ci.yml
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user