From 7813b0dbb96f61e6913b6bdc36e39ae6adc419ae Mon Sep 17 00:00:00 2001 From: kale Date: Mon, 8 Dec 2025 01:53:13 -0500 Subject: [PATCH] =?UTF-8?q?[fix]:[20251208][=E6=9E=84=E5=BB=BAdocker,=20?= =?UTF-8?q?=E6=8B=86=E5=88=86=20pipeline]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 131 +++++++++++++++++++++-------------------------------- 1 file changed, 52 insertions(+), 79 deletions(-) diff --git a/.drone.yml b/.drone.yml index 5265e99..5aa0f89 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,43 +1,29 @@ kind: pipeline type: docker -name: multi-lang-ci +name: pr-ci + +# PR 流水线:仅在 PR 触发 +trigger: + event: + - pull_request + # 如需限制目标分支,可加 target: + # target: + # - main -# 推荐工作区配置 - 修改为当前项目的正确路径 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 - # 添加共享卷用于访问JAR文件 - - name: jar-cache - path: /localcache -# 触发器配置:针对 PR 和 tag 事件 -# 注意:tag事件不受branch限制,所以移除branch条件 -trigger: - event: - - pull_request - - tag - -# 默认克隆步骤 (使用您本地已有的 drone/git:latest) clone: depth: 0 image: drone/git:latest - pull: false # 禁用镜像拉取 + pull: false steps: - # PR时:构建和测试 - name: java-build-test image: registry.cn-beijing.aliyuncs.com/yinzy/maven:3.9-eclipse-temurin-8 pull: false @@ -48,7 +34,6 @@ steps: MAVEN_OPTS: -Dmaven.repo.local=/localcache/maven/repository commands: - mkdir -p ~/.m2 - # 动态生成 settings.xml(仅用于 CI) - | cat > ~/.m2/settings.xml << 'EOF' @@ -66,16 +51,46 @@ steps: EOF - mvn -s ~/.m2/settings.xml clean test package - # 验证 JAR 文件是否生成 - 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 image: registry.cn-beijing.aliyuncs.com/yinzy/maven:3.9-eclipse-temurin-8 pull: false @@ -88,7 +103,6 @@ steps: MAVEN_OPTS: -Dmaven.repo.local=/localcache/maven/repository commands: - mkdir -p ~/.m2 - # 动态生成 settings.xml(仅用于 CI) - | cat > ~/.m2/settings.xml << 'EOF' @@ -106,9 +120,7 @@ steps: EOF - mvn -s ~/.m2/settings.xml -DskipTests=true clean package - # 验证 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) @@ -119,14 +131,7 @@ steps: else echo "⚠️ No JAR file found to backup" fi - when: - path: - include: - - pom.xml - event: - - tag - # Tag时:构建Docker镜像 - name: docker_build image: docker:latest pull: false @@ -134,9 +139,7 @@ steps: - 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." @@ -144,31 +147,22 @@ steps: 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: - - tag - # Tag时:发布JAR文件到Gitea Release - name: gitea_release - image: registry.cn-beijing.aliyuncs.com/yinzy/drone-plugins:gitea-release-latest + image: plugins/gitea-release:latest pull: false volumes: - name: jar-cache path: /localcache settings: api_key: - from_secret: gitea_token + from_secret: gitea_api_key base_url: from_secret: gitea_base_url files: @@ -176,38 +170,17 @@ steps: 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 - 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 image: alpine pull: false commands: - - echo "✅ CI completed at $(date)" + - echo "✅ Tag pipeline completed at $(date)" when: status: [ success, failure ] \ No newline at end of file