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