[fix]:[20251208][构建docker, 拆分 pipeline]

This commit is contained in:
kale 2025-12-08 01:53:13 -05:00
parent e2ee130797
commit 7813b0dbb9

View File

@ -1,43 +1,29 @@
kind: pipeline kind: pipeline
type: docker type: docker
name: multi-lang-ci name: pr-ci
# PR 流水线:仅在 PR 触发
trigger:
event:
- pull_request
# 如需限制目标分支,可加 target:
# target:
# - main
# 推荐工作区配置 - 修改为当前项目的正确路径
workspace: workspace:
base: /drone base: /drone
path: . path: .
# 定义缓存卷,用于存储 Maven 依赖
volumes: volumes:
- name: cache
temp: {}
- name: npm-cache
path: /localcache/npmcache
# 添加 Maven 缓存卷(虽然通过 runner 挂载,但显式声明更清晰)
- name: maven-cache - name: maven-cache
path: /localcache/maven/repository path: /localcache/maven/repository
# 定义 Docker socket 卷
- name: docker_sock
path: /var/run/docker.sock
# 添加共享卷用于访问JAR文件
- name: jar-cache
path: /localcache
# 触发器配置:针对 PR 和 tag 事件
# 注意tag事件不受branch限制所以移除branch条件
trigger:
event:
- pull_request
- tag
# 默认克隆步骤 (使用您本地已有的 drone/git:latest)
clone: clone:
depth: 0 depth: 0
image: drone/git:latest image: drone/git:latest
pull: false # 禁用镜像拉取 pull: false
steps: steps:
# PR时构建和测试
- name: java-build-test - name: java-build-test
image: registry.cn-beijing.aliyuncs.com/yinzy/maven:3.9-eclipse-temurin-8 image: registry.cn-beijing.aliyuncs.com/yinzy/maven:3.9-eclipse-temurin-8
pull: false pull: false
@ -48,7 +34,6 @@ steps:
MAVEN_OPTS: -Dmaven.repo.local=/localcache/maven/repository MAVEN_OPTS: -Dmaven.repo.local=/localcache/maven/repository
commands: commands:
- mkdir -p ~/.m2 - mkdir -p ~/.m2
# 动态生成 settings.xml仅用于 CI
- | - |
cat > ~/.m2/settings.xml << 'EOF' cat > ~/.m2/settings.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@ -66,16 +51,46 @@ steps:
</settings> </settings>
EOF EOF
- mvn -s ~/.m2/settings.xml clean test package - mvn -s ~/.m2/settings.xml clean test package
# 验证 JAR 文件是否生成
- ls -lah target/*.jar || (echo "JAR file not found!" && exit 1) - ls -lah target/*.jar || (echo "JAR file not found!" && exit 1)
when:
path:
include:
- pom.xml
event:
- pull_request
# Tag时构建跳过测试因为PR时已测试过 # 如需其他检查步骤,可在这里继续追加
- name: summary
image: alpine
pull: false
commands:
- echo "✅ PR pipeline completed at $(date)"
when:
status: [ success, failure ]
---
kind: pipeline
type: docker
name: release-tag
# Tag 流水线:仅在 tag 触发(不要加 branch 限制)
trigger:
event:
- tag
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
clone:
depth: 0
image: drone/git:latest
pull: false
steps:
- name: java-build - name: java-build
image: registry.cn-beijing.aliyuncs.com/yinzy/maven:3.9-eclipse-temurin-8 image: registry.cn-beijing.aliyuncs.com/yinzy/maven:3.9-eclipse-temurin-8
pull: false pull: false
@ -88,7 +103,6 @@ steps:
MAVEN_OPTS: -Dmaven.repo.local=/localcache/maven/repository MAVEN_OPTS: -Dmaven.repo.local=/localcache/maven/repository
commands: commands:
- mkdir -p ~/.m2 - mkdir -p ~/.m2
# 动态生成 settings.xml仅用于 CI
- | - |
cat > ~/.m2/settings.xml << 'EOF' cat > ~/.m2/settings.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@ -106,9 +120,7 @@ steps:
</settings> </settings>
EOF EOF
- mvn -s ~/.m2/settings.xml -DskipTests=true clean package - mvn -s ~/.m2/settings.xml -DskipTests=true clean package
# 验证 JAR 文件是否生成
- ls -lah target/*.jar || (echo "JAR file not found!" && exit 1) - ls -lah target/*.jar || (echo "JAR file not found!" && exit 1)
# 备份 JAR 文件到 /localcache/${DRONE_REPO_NAME}
- | - |
mkdir -p /localcache/${DRONE_REPO_NAME} mkdir -p /localcache/${DRONE_REPO_NAME}
JAR_FILE=$(ls target/*.jar 2>/dev/null | head -1) JAR_FILE=$(ls target/*.jar 2>/dev/null | head -1)
@ -119,14 +131,7 @@ steps:
else else
echo "⚠️ No JAR file found to backup" echo "⚠️ No JAR file found to backup"
fi fi
when:
path:
include:
- pom.xml
event:
- tag
# Tag时构建Docker镜像
- name: docker_build - name: docker_build
image: docker:latest image: docker:latest
pull: false pull: false
@ -134,9 +139,7 @@ steps:
- name: docker_sock - name: docker_sock
path: /var/run/docker.sock path: /var/run/docker.sock
commands: commands:
# 验证 Docker daemon 是否可用
- docker info || (echo "❌ Docker daemon not available" && exit 1) - docker info || (echo "❌ Docker daemon not available" && exit 1)
# 验证 JAR 文件存在
- | - |
if [ ! -f target/drone-test-1.0.jar ]; then if [ ! -f target/drone-test-1.0.jar ]; then
echo "❌ JAR file not found! Make sure java-build step completed successfully." echo "❌ JAR file not found! Make sure java-build step completed successfully."
@ -144,31 +147,22 @@ steps:
exit 1 exit 1
fi fi
echo "📦 Building Docker image: ${DRONE_REPO_NAME}:latest" echo "📦 Building Docker image: ${DRONE_REPO_NAME}:latest"
echo "📁 JAR file info:"
ls -lh target/drone-test-1.0.jar ls -lh target/drone-test-1.0.jar
docker build -t ${DRONE_REPO_NAME}:latest -f Dockerfile . docker build -t ${DRONE_REPO_NAME}:latest -f Dockerfile .
docker tag ${DRONE_REPO_NAME}:latest ${DRONE_REPO_NAME}:${DRONE_COMMIT_SHA:0:8} 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} docker images ${DRONE_REPO_NAME}
depends_on: depends_on:
- java-build - java-build
when:
path:
include:
- pom.xml
event:
- tag
# Tag时发布JAR文件到Gitea Release
- name: gitea_release - name: gitea_release
image: registry.cn-beijing.aliyuncs.com/yinzy/drone-plugins:gitea-release-latest image: plugins/gitea-release:latest
pull: false pull: false
volumes: volumes:
- name: jar-cache - name: jar-cache
path: /localcache path: /localcache
settings: settings:
api_key: api_key:
from_secret: gitea_token from_secret: gitea_api_key
base_url: base_url:
from_secret: gitea_base_url from_secret: gitea_base_url
files: files:
@ -176,38 +170,17 @@ steps:
title: Release ${DRONE_TAG} title: Release ${DRONE_TAG}
note: | note: |
Release ${DRONE_TAG} Release ${DRONE_TAG}
Commit: ${DRONE_COMMIT_SHA:0:8} Commit: ${DRONE_COMMIT_SHA:0:8}
Build: ${DRONE_BUILD_NUMBER} Build: ${DRONE_BUILD_NUMBER}
file_exists: overwrite file_exists: overwrite
depends_on: depends_on:
- docker_build - docker_build
when:
path:
include:
- pom.xml
event:
- tag
# 自动检测是否存在 Python (requirements.txt)
- name: python-test
image: python:3.12.0-slim
pull: false
commands:
# 临时设置 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
- 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:
branch:
exclude: [ "*" ]
# 最终报告(无论成功失败都运行)
- name: summary - name: summary
image: alpine image: alpine
pull: false pull: false
commands: commands:
- echo "✅ CI completed at $(date)" - echo "✅ Tag pipeline completed at $(date)"
when: when:
status: [ success, failure ] status: [ success, failure ]