[fix]:[20251208][构建docker, 拆分 pipeline]
This commit is contained in:
parent
e2ee130797
commit
7813b0dbb9
131
.drone.yml
131
.drone.yml
@ -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 ]
|
||||||
Loading…
x
Reference in New Issue
Block a user