diff --git a/.drone.yml b/.drone.yml index 950f769..b371f43 100644 --- a/.drone.yml +++ b/.drone.yml @@ -2,28 +2,47 @@ kind: pipeline type: docker name: multi-lang-ci +# 推荐工作区配置 - 修改为当前项目的正确路径 +workspace: + base: /drone + path: . + +# 定义缓存卷,用于存储 Maven 依赖 +volumes: + - name: cache + temp: {} + - name: npm-cache + path: /localcache/npmcache + # 添加 Maven 缓存卷(虽然通过 runner 挂载,但显式声明更清晰) + - name: maven-cache + path: /localcache/maven/repository + +# 触发器配置:针对 master 分支的 PR trigger: event: - pull_request + - push + - tag branch: - - main + - master -# 克隆策略:只拉最新 commit,加速 +# 默认克隆步骤 (使用您本地已有的 drone/git:latest) clone: depth: 0 image: drone/git:latest - pull: false + pull: false # 禁用镜像拉取 steps: # 自动检测是否存在 Java (pom.xml) - name: java-build - image: maven:3.9-eclipse-temurin + image: registry.cn-beijing.aliyuncs.com/yinzy/maven:3.9-eclipse-temurin-8 pull: false + volumes: + - name: maven-cache + path: /localcache/maven/repository environment: - MAVEN_OPTS: -Dmaven.repo.local=.m2/repository + MAVEN_OPTS: -Dmaven.repo.local=/localcache/maven/repository commands: - # 先创建 .m2 目录 - - mkdir -p ~/.m2 # 动态生成 settings.xml(仅用于 CI) - | cat > ~/.m2/settings.xml << 'EOF' @@ -41,10 +60,51 @@ steps: EOF - - mvn clean verify - - if [ -f pom.xml ]; then mvn clean compile; fi + - mvn -s ~/.m2/settings.xml -DskipTests=true clean package + # 验证 JAR 文件是否生成 + - ls -lah target/*.jar || (echo "JAR file not found!" && exit 1) when: - event: [ push, pull_request ] + path: + include: + - pom.xml + event: [ push, pull_request, tag ] + + - name: docker_build + image: docker:latest + pull: false + volumes: + - name: docker_sock + path: /var/run/docker.sock + commands: + # 验证 JAR 文件存在 + - | + if [ ! -f target/drone-test-1.0.jar ]; then + echo "❌ JAR file not found! Make sure java-build step completed successfully." + ls -la target/ || echo "target directory does not exist" + exit 1 + fi + # 显示构建信息 + - echo "📦 Building Docker image with tag: drone-test:${DRONE_REPO_NAME}" + - echo "📁 JAR file info:" + - ls -lh target/drone-test-1.0.jar + # 构建 Docker 镜像 + - docker build -t drone-test:${DRONE_REPO_NAME} -f Dockerfile . + # 如果存在 DRONE_TAG,同时打 latest 标签 + - | + if [ -n "${DRONE_TAG}" ]; then + docker tag drone-test:${DRONE_REPO_NAME} drone-test:latest + echo "✅ Tagged as drone-test:latest" + fi + - echo "✅ Built Docker image: drone-test:${DRONE_REPO_NAME}" + # 显示镜像信息 + - docker images drone-test + depends_on: + - java-build + when: + path: + include: + - pom.xml + event: [ push, pull_request, tag ] # 自动检测是否存在 Python (requirements.txt) - name: python-test @@ -57,7 +117,8 @@ steps: - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - if [ -f test_example.py ]; then python -m pytest test_example.py -v; fi when: - event: [ push, pull_request ] + branch: + exclude: [ "*" ] # 最终报告(无论成功失败都运行) - name: summary diff --git a/pom.xml b/pom.xml index 3668646..f2ec93c 100644 --- a/pom.xml +++ b/pom.xml @@ -7,16 +7,72 @@ com.example drone-test 1.0 + jar + - 17 - 17 + 8 + 8 + UTF-8 - - - org.junit.jupiter - junit-jupiter - 5.12.2 - test - - + + + + org.junit.jupiter + junit-jupiter + 5.12.2 + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 8 + 8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + + + com.example.App + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + com.example.App + + + + + + + + \ No newline at end of file