stages: - build - deploy variables: PROJECT_NAME: llmx COMPOSE_FILE: docker/docker-compose.test.yml SERVER_PASSWORD: $SERVER_PASSWORD DOCKER_REGISTRY_URL: $DOCKER_REGISTRY_URL SPRING_PROFILES_ACTIVE: test before_script: - export GRADLE_USER_HOME=$CI_PROJECT_DIR/.gradle build: stage: build environment: name: test rules: - if: '$CI_COMMIT_BRANCH == "test"' cache: key: files: - gradle/libs.versions.toml - "**/build.gradle.kts" prefix: $CI_JOB_NAME paths: - .gradle/caches/ - .gradle/wrapper/ - .gradle/kotlin-profile/ - .kotlin/ policy: pull-push script: - | echo "=== 🐳 检查 Docker 安装状态 ===" if ! command -v docker >/dev/null; then echo "❌ Docker 未安装,开始安装..." curl -fsSL https://get.docker.com | sh | tee docker-install.log echo "✅ Docker 安装完成" else echo "ℹ️ Docker 已安装: $(docker -v)" echo "ℹ️ Docker Compose 已安装: $(docker compose version)" fi - echo "🔧 授予 gradlew 执行权限..." - chmod +x gradlew - echo "🚀 开始构建 Docker 镜像..." - ./gradlew jib --stacktrace --build-cache --info -Dorg.gradle.caching=true -Dorg.gradle.jvmargs="-Xmx2g -Xms2g -XX:MaxMetaspaceSize=1g" | tee build.log - echo "📦 当前缓存目录:" - ls -la .gradle/ - echo "📦 Gradle 缓存结构检查" - ls -la .gradle/caches/modules-2/files-2.1 || true - echo "📦 缓存文件数量:$(find .gradle/caches/modules-2/files-2.1 -type f | wc -l)" - echo "🛑 停止 Gradle 守护进程..." - ./gradlew --stop - echo "🔍 当前 Java 进程:" - ps aux | grep java || true tags: - docker - java deploy: stage: deploy environment: name: test rules: - if: '$CI_COMMIT_BRANCH == "test"' script: - echo "🛠️ 准备部署环境..." - chmod +x ${COMPOSE_FILE} || true - echo "🐳 当前 Docker 状态:" - docker ps -a - echo "🧹 停止并清理旧容器(包括孤儿容器)..." - docker compose -p $PROJECT_NAME -f ${COMPOSE_FILE} down --remove-orphans - echo "📥 拉取最新镜像..." - docker compose -p $PROJECT_NAME -f ${COMPOSE_FILE} pull - echo "🚀 启动新服务..." - docker compose -p $PROJECT_NAME -f ${COMPOSE_FILE} up -d - echo "✅ 当前服务状态:" - docker compose -p $PROJECT_NAME -f ${COMPOSE_FILE} ps - echo "🧼 清理悬空镜像..." - docker image prune -f tags: - docker - java