Merge pull request 'yinzy_dev' (#27) from yinzy_dev into main

Reviewed-on: #27
Reviewed-by: 君肯管理员 <jk_admin@jk.com>
This commit is contained in:
君肯管理员 2025-12-08 11:39:44 +08:00
commit 2d1cb2d03e
3 changed files with 160 additions and 28 deletions

View File

@ -2,30 +2,52 @@ kind: pipeline
type: docker type: docker
name: multi-lang-ci 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: trigger:
event: event:
- pull_request - pull_request
branch: branch:
- main # <<< 确保分支名称与您的主分支一致 - main
# 默认克隆步骤 (使用您本地已有的 drone/git:latest)
clone: clone:
depth: 0 depth: 0
image: drone/git:latest image: drone/git:latest
pull: false pull: false # 禁用镜像拉取
steps: steps:
# 自动检测是否存在 Java (pom.xml) # 自动检测是否存在 Java (pom.xml)
- name: java-build - name: java-build
image: maven:3.9-eclipse-temurin image: registry.cn-beijing.aliyuncs.com/yinzy/maven:3.9-eclipse-temurin-8
pull: false pull: false
volumes:
- name: maven-cache
path: /localcache/maven/repository
environment: environment:
MAVEN_OPTS: -Dmaven.repo.local=.m2/repository MAVEN_OPTS: -Dmaven.repo.local=/localcache/maven/repository
commands: commands:
# 在当前工作目录而非 ~ 下创建 .m2 目录,避免权限问题 - mkdir -p ~/.m2
- mkdir -p .m2/repository # 动态生成 settings.xml仅用于 CI
# 动态生成 settings.xml
- | - |
cat > settings.xml << 'EOF' cat > ~/.m2/settings.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@ -40,28 +62,71 @@ steps:
</mirrors> </mirrors>
</settings> </settings>
EOF EOF
# 使用自定义 settings.xml - mvn -s ~/.m2/settings.xml -DskipTests=true clean package
- mvn -s settings.xml clean verify # 验证 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: when:
path: path:
include: 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) # 自动检测是否存在 Python (requirements.txt)
- name: python-test - name: python-test
image: python:3.12.0-slim image: python:3.12.0-slim
pull: false pull: false
commands: commands:
# 临时设置 pip 源 # 临时设置 pip 源(仅本次会话)
- pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/ - 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 config set install.trusted-host pypi.tuna.tsinghua.edu.cn
- pip install -r requirements.txt - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- python -m pytest test_example.py -v - if [ -f test_example.py ]; then python -m pytest test_example.py -v; fi
when: when:
path: branch:
include: exclude: [ "*" ]
- requirements.txt # 仅当存在 requirements.txt 文件时运行
# 最终报告(无论成功失败都运行) # 最终报告(无论成功失败都运行)
- name: summary - name: summary
image: alpine image: alpine

11
Dockerfile Normal file
View File

@ -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"]

76
pom.xml
View File

@ -7,16 +7,72 @@
<groupId>com.example</groupId> <groupId>com.example</groupId>
<artifactId>drone-test</artifactId> <artifactId>drone-test</artifactId>
<version>1.0</version> <version>1.0</version>
<packaging>jar</packaging>
<properties> <properties>
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target> <maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<dependencies>
<dependency> <dependencies>
<groupId>org.junit.jupiter</groupId> <dependency>
<artifactId>junit-jupiter</artifactId> <groupId>org.junit.jupiter</groupId>
<version>5.12.2</version> <artifactId>junit-jupiter</artifactId>
<scope>test</scope> <version>5.12.2</version>
</dependency> <scope>test</scope>
</dependencies> </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> </project>