pipeline { agent any environment { CI_REGISTRY = '192.168.1.154:31010' DOCKER_IMAGE = 'docker/file-system-server' DOCKER_TAG = "${BUILD_NUMBER}" DEPLOY_DIR = '/home/xiangning/deploy/file-system-server' } stages { stage('Checkout') { steps { echo '=== Checkout ===' checkout scm sh 'git log --oneline -5' } } stage('Build') { steps { echo '=== Build Docker Image ===' sh """ echo "Registry: ${CI_REGISTRY}" echo "Image: ${DOCKER_IMAGE}:${DOCKER_TAG}" docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} . docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest """ } } stage('Push') { steps { echo '=== Push to Registry ===' sh """ echo 'dockerxn001624.' | docker login -u docker --password-stdin ${CI_REGISTRY} docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${CI_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_TAG} docker tag ${DOCKER_IMAGE}:latest ${CI_REGISTRY}/${DOCKER_IMAGE}:latest docker push ${CI_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_TAG} docker push ${CI_REGISTRY}/${DOCKER_IMAGE}:latest """ } } stage('Deploy') { steps { echo '=== Deploy ===' sh """ mkdir -p ${DEPLOY_DIR} cd ${DEPLOY_DIR} cat > docker-compose.yml << 'DCOF' services: file-system-server: image: ${CI_REGISTRY}/${DOCKER_IMAGE}:latest container_name: file-system-server network_mode: host restart: unless-stopped environment: - ConnectionStrings__Default=Host=192.168.1.154;Port=5432;Database=file_system;Username=postgres;Password=postgres - S3__Endpoint=http://192.168.1.154:9000 - S3__AccessKey=minioadmin - S3__SecretKey=minioadmin - S3__Region=us-east-1 - Jwt__Authority=http://192.168.1.154:5215 volumes: - ./logs:/app/logs DCOF docker compose pull docker compose down --remove-orphans || true docker compose up -d docker image prune -f docker compose ps """ } } } post { success { echo '=== CI/CD SUCCESS ===' } failure { echo '=== CI/CD FAILED ===' } always { deleteDir() } } }