cicd-test/.drone.yml

244 lines
7.0 KiB
YAML
Raw Normal View History

2025-11-28 19:00:26 +08:00
kind: pipeline
type: docker
name: pr-ci
# PR 流水线:仅在 PR 触发
trigger:
event:
- pull_request
# 如需限制目标分支,可加 target:
# target:
# - main
2025-11-28 19:00:26 +08:00
2025-12-07 21:56:08 -05:00
workspace:
base: /drone
path: .
volumes:
- name: maven-cache
path: /localcache/maven/repository
- name: node-cache
path: /localcache/node_modules
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
pull: false
2025-11-28 19:00:26 +08:00
steps:
- name: java-build-test
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=/localcache/maven/repository
commands:
- mkdir -p ~/.m2
- |
cat > ~/.m2/settings.xml << 'EOF'
<?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
- mvn -s ~/.m2/settings.xml clean test package
- ls -lah target/*.jar || (echo "JAR file not found!" && exit 1)
- name: frontend-build
image: registry.cn-beijing.aliyuncs.com/yinzy/node:20.11-alpine3.19
pull: false
volumes:
- name: node-cache
path: /localcache/node_modules
commands:
- cd vue-ui
- npm config set cache /localcache/node_modules/.npm
- npm ci --registry=https://registry.npmmirror.com
- npm run build
- ls -lah dist
# 如需其他检查步骤,可在这里继续追加
- name: summary
image: alpine
pull: false
commands:
- echo "✅ PR pipeline completed at $(date)"
when:
status: [ success, failure ]
depends_on:
- java-build-test
- frontend-build
---
kind: pipeline
type: docker
name: release-tag
# Tag 流水线:仅在 tag 触发(不要加 branch 限制)
trigger:
event:
- tag
branch:
- "**"
workspace:
base: /drone
path: .
volumes:
- name: maven-cache
path: /localcache/maven/repository
- name: docker_sock
path: /var/run/docker.sock
- name: jar-cache
path: /localcache
- name: node-cache
path: /localcache/node_modules
clone:
depth: 0
image: drone/git:latest
pull: false
steps:
- name: frontend-build
image: registry.cn-beijing.aliyuncs.com/yinzy/node:20.11-alpine3.19
pull: false
volumes:
- name: node-cache
path: /localcache/node_modules
- name: jar-cache # 复用已有 /localcache用于暂存 dist.zip
path: /localcache
commands:
- cd vue-ui
- npm config set cache /localcache/node_modules/.npm
- npm ci --registry=https://registry.npmmirror.com
- npm run build
- cd dist && tar -czf ../dist.tgz . && cd ..
- mkdir -p /localcache/${DRONE_REPO_NAME}
- cp dist.tgz /localcache/${DRONE_REPO_NAME}/dist-${DRONE_TAG}.tgz -f
- ls -lah /localcache/${DRONE_REPO_NAME}/dist-${DRONE_TAG}.tgz
2025-11-28 19:00:26 +08:00
- 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
- name: jar-cache
path: /localcache
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
cat > ~/.m2/settings.xml << 'EOF'
<?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
- ls -lah target/*.jar || (echo "JAR file not found!" && exit 1)
- |
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
2025-12-07 21:56:08 -05:00
- name: frontend_docker_build
image: docker:latest
pull: false
volumes:
- name: docker_sock
path: /var/run/docker.sock
commands:
- docker info
- docker build -t ${DRONE_REPO_NAME}-frontend:latest -f docker/Dockerfile-frontend .
- docker tag ${DRONE_REPO_NAME}-frontend:latest ${DRONE_REPO_NAME}-frontend:${DRONE_COMMIT_SHA:0:8}
- docker images ${DRONE_REPO_NAME}-frontend
depends_on:
- frontend-build
2025-12-07 22:18:43 -05:00
- name: docker_build
image: docker:latest
2025-12-07 22:18:43 -05:00
pull: false
volumes:
- name: docker_sock
path: /var/run/docker.sock
commands:
- docker info || (echo "❌ Docker daemon not available" && exit 1)
2025-12-07 22:18:43 -05:00
- |
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"
ls -lh target/drone-test-1.0.jar
docker build -t ${DRONE_REPO_NAME}:latest -f docker/Dockerfile .
2025-12-07 22:18:43 -05:00
docker tag ${DRONE_REPO_NAME}:latest ${DRONE_REPO_NAME}:${DRONE_COMMIT_SHA:0:8}
docker images ${DRONE_REPO_NAME}
depends_on:
- java-build
- name: gitea_release
image: registry.cn-beijing.aliyuncs.com/yinzy/drone-plugins:gitea-release-latest
pull: false
volumes:
- name: jar-cache
path: /localcache
settings:
api_key:
from_secret: gitea_token
base_url:
from_secret: gitea_base_url
files:
- /localcache/${DRONE_REPO_NAME}/*.jar
- /localcache/${DRONE_REPO_NAME}/dist-${DRONE_TAG}.tgz
title: Release ${DRONE_TAG}
note: |
Release ${DRONE_TAG}
Commit: ${DRONE_COMMIT_SHA:0:8}
Build: ${DRONE_BUILD_NUMBER}
file_exists: overwrite
depends_on:
- docker_build
- frontend_docker_build
2025-12-07 21:56:08 -05:00
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 "✅ Tag pipeline completed at $(date)"
2025-11-28 19:00:26 +08:00
when:
status: [ success, failure ]
depends_on:
- gitea_release