Skip to content

git workflow.

git workflow. #24

name: Eureka Server CI/CD
on:
push:
branches: [master]
paths:
- "eureka-server/**"
- ".github/workflows/eureka-server-ci-cd.yml"
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: self-hosted
steps:
- uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: "21"
distribution: "temurin"
- name: Cache Maven packages
uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Grant execute permission for mvnw
run: |
cd eureka-server
chmod +x mvnw
- name: Build
run: |
cd eureka-server
./mvnw clean package -DskipTests
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: arm64
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and Push Docker image
uses: docker/build-push-action@v4
with:
context: ./eureka-server
platforms: linux/arm64
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/eureka-server:latest-arm64
- name: Deploy to VPS
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
echo "=== Infrastructure Setup Started ==="
# Create network if not exists
docker network create craftpilot-network || true
# Check and start Redis if not running
if ! docker ps | grep -q redis; then
echo "Starting Redis..."
docker run -d \
--name redis \
--network craftpilot-network \
-p 6379:6379 \
-e REDIS_PASSWORD=13579ada \
redis:latest redis-server --requirepass 13579ada
# Wait for Redis to be ready
echo "Waiting for Redis to be ready..."
for i in {1..30}; do
if docker exec redis redis-cli -a 13579ada ping | grep -q "PONG"; then
echo "Redis is ready"
break
fi
echo "Waiting for Redis... attempt $i/30"
sleep 2
done
else
echo "Redis is already running"
fi
# Check and start Zookeeper if not running
if ! docker ps | grep -q zookeeper; then
echo "Starting Zookeeper..."
docker run -d \
--name zookeeper \
--network craftpilot-network \
-e ZOOKEEPER_CLIENT_PORT=2181 \
-e ZOOKEEPER_TICK_TIME=2000 \
confluentinc/cp-zookeeper:latest
# Wait for Zookeeper
echo "Waiting for Zookeeper to be ready..."
sleep 10
else
echo "Zookeeper is already running"
fi
# Check and start Kafka if not running
if ! docker ps | grep -q kafka; then
echo "Starting Kafka..."
docker run -d \
--name kafka \
--network craftpilot-network \
-p 9092:9092 \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 \
-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
-e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 \
-e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 \
confluentinc/cp-kafka:latest
# Wait for Kafka
echo "Waiting for Kafka to be ready..."
sleep 20
else
echo "Kafka is already running"
fi
echo "=== Infrastructure Setup Completed ==="
# Deploy Eureka Server
echo "=== Deploying Eureka Server ==="
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/eureka-server:latest-arm64
docker stop eureka-server || true
docker rm eureka-server || true
docker run -d \
--name eureka-server \
--hostname eureka-server \
--network craftpilot-network \
--restart unless-stopped \
-p 8761:8761 \
-e SPRING_PROFILES_ACTIVE=prod \
-e EUREKA_USERNAME=craftpilot \
-e EUREKA_PASSWORD=13579ada \
-e SERVER_PORT=8761 \
-e EUREKA_INSTANCE_HOSTNAME=eureka-server \
-e EUREKA_CLIENT_REGISTER_WITH_EUREKA=false \
-e EUREKA_CLIENT_FETCH_REGISTRY=false \
-e MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE=health,info \
-e MANAGEMENT_ENDPOINT_HEALTH_SHOW_DETAILS=always \
${{ secrets.DOCKERHUB_USERNAME }}/eureka-server:latest-arm64
# Enhanced health check for Eureka Server
echo "=== Performing Health Checks ==="
for i in {1..30}; do
echo "Health check attempt $i/30"
if curl -sf http://localhost:8761/actuator/health | grep -q "UP"; then
echo "✓ Eureka Server is healthy"
echo "=== Deployment Completed Successfully ==="
exit 0
fi
if [ $i -eq 15 ]; then
echo "Mid-point container logs:"
docker logs eureka-server --tail 50
fi
echo "Waiting for next check..."
sleep 10
done
echo "=== Deployment Failed - Debug Information ==="
docker logs eureka-server
exit 1