diff --git a/.drone.yml b/.drone.yml
index 897a9a8..4bbb857 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -2,30 +2,52 @@ 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
+ # 定义 Docker socket 卷
+ - name: docker_sock
+ path: /var/run/docker.sock
+
+# 触发器配置:针对 master 分支的 PR
trigger:
event:
- pull_request
branch:
- - main # <<< 确保分支名称与您的主分支一致
+ - main
+# 默认克隆步骤 (使用您本地已有的 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/repository
- # 动态生成 settings.xml
+ - mkdir -p ~/.m2
+ # 动态生成 settings.xml(仅用于 CI)
- |
- cat > settings.xml << 'EOF'
+ cat > ~/.m2/settings.xml << 'EOF'
EOF
- # 使用自定义 settings.xml
- - mvn -s settings.xml clean verify
+ - mvn -s ~/.m2/settings.xml -DskipTests=true clean package
+ # 验证 JAR 文件是否生成
+ - ls -lah target/*.jar || (echo "JAR file not found!" && exit 1)
+ # 备份 JAR 文件到 /localcache/${DRONE_REPO_NAME}
+ - |
+ mkdir -p /localcache/${DRONE_REPO_NAME}
+ JAR_FILE=$(ls target/*.jar 2>/dev/null | head -1)
+ if [ -n "$JAR_FILE" ]; then
+ cp "$JAR_FILE" /localcache/${DRONE_REPO_NAME}/ -f
+ echo "✅ JAR file backed up to /localcache/${DRONE_REPO_NAME}/$(basename $JAR_FILE)"
+ ls -lh /localcache/${DRONE_REPO_NAME}/
+ else
+ echo "⚠️ No JAR file found to backup"
+ fi
when:
path:
include:
- - pom.xml # 仅当存在 pom.xml 文件时运行
+ - 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:
+ # 验证 Docker daemon 是否可用
+ - docker info || (echo "❌ Docker daemon not available" && exit 1)
+ # 验证 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: ${DRONE_REPO_NAME}:latest"
+ echo "📁 JAR file info:"
+ ls -lh target/drone-test-1.0.jar
+ docker build -t ${DRONE_REPO_NAME}:latest -f Dockerfile .
+ docker tag ${DRONE_REPO_NAME}:latest ${DRONE_REPO_NAME}:${DRONE_COMMIT_SHA:0:8}
+ echo "✅ Built Docker image: ${DRONE_REPO_NAME}:latest"
+ docker images ${DRONE_REPO_NAME}
+ depends_on:
+ - java-build
+ when:
+ path:
+ include:
+ - pom.xml
+ event: [ push, pull_request, tag ]
# 自动检测是否存在 Python (requirements.txt)
- name: python-test
image: python:3.12.0-slim
pull: false
commands:
- # 临时设置 pip 源
+ # 临时设置 pip 源(仅本次会话)
- pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
- pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn
- - pip install -r requirements.txt
- - python -m pytest test_example.py -v
+ - 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:
- path:
- include:
- - requirements.txt # 仅当存在 requirements.txt 文件时运行
-
+ branch:
+ exclude: [ "*" ]
+
# 最终报告(无论成功失败都运行)
- name: summary
image: alpine
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..4810781
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,11 @@
+# 使用最小的 Java 8 JRE 镜像
+FROM openjdk:8-jre-alpine
+
+# 设置工作目录
+WORKDIR /app
+
+# 复制生成的 JAR 文件到容器中(使用通配符匹配)
+COPY target/*.jar app.jar
+
+# 运行应用
+ENTRYPOINT ["java", "-jar", "app.jar"]
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