[fix]:[20251208][构建docker]

This commit is contained in:
kale 2025-12-07 21:56:08 -05:00
parent d90944ba27
commit fbb6d9f48b
2 changed files with 138 additions and 21 deletions

View File

@ -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:
</mirrors>
</settings>
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

60
pom.xml
View File

@ -7,10 +7,14 @@
<groupId>com.example</groupId>
<artifactId>drone-test</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
@ -19,4 +23,56 @@
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Maven 编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- Maven JAR 插件,用于生成可执行 JAR -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- Maven Shade 插件,用于生成包含所有依赖的可执行 JAR可选 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.App</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>