diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..0780709 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,3 @@ +include: + - local: '/.gitlab/workflows/.gitlab-ci.test.yml' + # - local: '.gitlab-ci.test.yml/workflows/.gitlab-ci.test.yml-ci.master.yml' \ No newline at end of file diff --git a/.gitlab/workflows/.gitlab-ci.test.yml b/.gitlab/workflows/.gitlab-ci.test.yml new file mode 100644 index 0000000..317a5bd --- /dev/null +++ b/.gitlab/workflows/.gitlab-ci.test.yml @@ -0,0 +1,97 @@ +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 diff --git a/docker/docker-compose.test.yml b/docker/docker-compose.test.yml index eb4f9f8..be4af4b 100644 --- a/docker/docker-compose.test.yml +++ b/docker/docker-compose.test.yml @@ -54,7 +54,7 @@ services: volumes: - llmx-impl-openai-volume:/app/volume restart: always - llmx-core-database: + llmx-database: image: postgres:16-alpine # 长期支持版本推荐用 16 container_name: llmx-database restart: always @@ -67,14 +67,14 @@ services: POSTGRES_USER: llmx POSTGRES_PASSWORD: L4s6f9y3, volumes: - - llmx-core-db-volume:/var/lib/postgresql/data + - llmx-db-volume:/var/lib/postgresql/data networks: llmx-net-test: driver: bridge volumes: llmx-core-service-volume: - llmx-core-db-volume: + llmx-db-volume: llmx-nacos-volume: llmx-impl-bailian-volume: llmx-impl-openai-volume: \ No newline at end of file