2025-11-28 19:00:26 +08:00
|
|
|
|
kind: pipeline
|
|
|
|
|
|
type: docker
|
|
|
|
|
|
name: multi-lang-ci
|
|
|
|
|
|
|
2025-12-07 21:56:08 -05:00
|
|
|
|
# 推荐工作区配置 - 修改为当前项目的正确路径
|
|
|
|
|
|
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
|
2025-12-05 04:46:52 -05:00
|
|
|
|
trigger:
|
2025-12-05 05:41:57 -05:00
|
|
|
|
event:
|
|
|
|
|
|
- pull_request
|
2025-12-05 04:46:52 -05:00
|
|
|
|
branch:
|
2025-12-07 22:13:17 -05:00
|
|
|
|
- main
|
2025-12-05 04:46:52 -05:00
|
|
|
|
|
2025-12-07 21:56:08 -05:00
|
|
|
|
# 默认克隆步骤 (使用您本地已有的 drone/git:latest)
|
2025-11-28 19:00:26 +08:00
|
|
|
|
clone:
|
2025-12-05 12:21:23 +08:00
|
|
|
|
depth: 0
|
2025-12-05 11:23:48 +08:00
|
|
|
|
image: drone/git:latest
|
2025-12-07 21:56:08 -05:00
|
|
|
|
pull: false # 禁用镜像拉取
|
2025-11-28 19:00:26 +08:00
|
|
|
|
|
|
|
|
|
|
steps:
|
|
|
|
|
|
# 自动检测是否存在 Java (pom.xml)
|
|
|
|
|
|
- name: java-build
|
2025-12-07 21:56:08 -05:00
|
|
|
|
image: registry.cn-beijing.aliyuncs.com/yinzy/maven:3.9-eclipse-temurin-8
|
2025-12-05 10:58:02 +08:00
|
|
|
|
pull: false
|
2025-12-07 21:56:08 -05:00
|
|
|
|
volumes:
|
|
|
|
|
|
- name: maven-cache
|
|
|
|
|
|
path: /localcache/maven/repository
|
2025-12-05 04:01:07 -05:00
|
|
|
|
environment:
|
2025-12-07 21:56:08 -05:00
|
|
|
|
MAVEN_OPTS: -Dmaven.repo.local=/localcache/maven/repository
|
2025-11-28 19:00:26 +08:00
|
|
|
|
commands:
|
2025-12-07 22:15:10 -05:00
|
|
|
|
- mkdir -p ~/.m2
|
2025-12-07 21:56:08 -05:00
|
|
|
|
# 动态生成 settings.xml(仅用于 CI)
|
2025-12-05 04:01:07 -05:00
|
|
|
|
- |
|
2025-12-07 21:56:08 -05:00
|
|
|
|
cat > ~/.m2/settings.xml << 'EOF'
|
2025-12-05 04:01:07 -05:00
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
|
|
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
|
|
|
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
|
|
|
|
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
|
|
|
|
|
|
<mirrors>
|
|
|
|
|
|
<mirror>
|
|
|
|
|
|
<id>aliyun</id>
|
|
|
|
|
|
<mirrorOf>*</mirrorOf>
|
|
|
|
|
|
<name>Aliyun Maven</name>
|
|
|
|
|
|
<url>https://maven.aliyun.com/repository/public</url>
|
|
|
|
|
|
</mirror>
|
|
|
|
|
|
</mirrors>
|
|
|
|
|
|
</settings>
|
|
|
|
|
|
EOF
|
2025-12-07 21:56:08 -05:00
|
|
|
|
- mvn -s ~/.m2/settings.xml -DskipTests=true clean package
|
|
|
|
|
|
# 验证 JAR 文件是否生成
|
|
|
|
|
|
- ls -lah target/*.jar || (echo "JAR file not found!" && exit 1)
|
2025-12-07 22:23:03 -05:00
|
|
|
|
# 备份 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}/
|
|
|
|
|
|
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
|
2025-11-28 19:00:26 +08:00
|
|
|
|
when:
|
2025-12-06 07:26:36 +08:00
|
|
|
|
path:
|
|
|
|
|
|
include:
|
2025-12-07 21:56:08 -05:00
|
|
|
|
- pom.xml
|
|
|
|
|
|
event: [ push, pull_request, tag ]
|
|
|
|
|
|
|
2025-12-07 22:18:43 -05:00
|
|
|
|
- name: docker_build
|
2025-12-07 22:18:55 -05:00
|
|
|
|
image: docker
|
2025-12-07 22:18:43 -05:00
|
|
|
|
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: ${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 ]
|
2025-11-28 19:00:26 +08:00
|
|
|
|
|
|
|
|
|
|
# 自动检测是否存在 Python (requirements.txt)
|
|
|
|
|
|
- name: python-test
|
2025-12-05 10:31:50 +08:00
|
|
|
|
image: python:3.12.0-slim
|
2025-12-05 10:58:02 +08:00
|
|
|
|
pull: false
|
2025-11-28 19:00:26 +08:00
|
|
|
|
commands:
|
2025-12-07 21:56:08 -05:00
|
|
|
|
# 临时设置 pip 源(仅本次会话)
|
2025-12-05 04:01:07 -05:00
|
|
|
|
- pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
|
|
|
|
|
|
- pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn
|
2025-12-07 21:56:08 -05:00
|
|
|
|
- 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
|
2025-11-28 19:00:26 +08:00
|
|
|
|
when:
|
2025-12-07 21:56:08 -05:00
|
|
|
|
branch:
|
|
|
|
|
|
exclude: [ "*" ]
|
|
|
|
|
|
|
2025-11-28 19:00:26 +08:00
|
|
|
|
# 最终报告(无论成功失败都运行)
|
|
|
|
|
|
- name: summary
|
|
|
|
|
|
image: alpine
|
2025-12-05 10:58:02 +08:00
|
|
|
|
pull: false
|
2025-11-28 19:00:26 +08:00
|
|
|
|
commands:
|
|
|
|
|
|
- echo "✅ CI completed at $(date)"
|
|
|
|
|
|
when:
|
|
|
|
|
|
status: [ success, failure ]
|