cicd-test/.drone.yml

252 lines
7.3 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: npm-cache
path: /localcache/npm-cache
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: test_dir
image: alpine
pull: false
# volumes:
# - name: maven-cache
# path: /localcache/maven/repository
commands:
- echo "✅ PR pipeline completed at $(date)"
- touch /localcache/maven/repository/aaa.txt
- ls -lah /localcache/maven/repository
- 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:
- touch /localcache/maven/repository/bbb.txt
- ls -lah /localcache/maven/repository
- mkdir -p ~/.m2
- cat ~/.m2/settings.xml
- mvn -B clean test package -Dmaven.repo.local=/localcache/maven/repository
- 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: npm-cache
path: /localcache/npm-cache
commands:
- cd vue-ui
- npm config set cache /localcache/npm-cache/.npm
- npm ci -prefer-offline --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/apps
- name: npm-cache
path: /localcache/npm-cache
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: npm-cache
path: /localcache/npm-cache
- name: jar-cache # 复用已有 /localcache用于暂存 dist.zip
path: /localcache/apps
commands:
- cd vue-ui
- npm config set cache /localcache/npm-cache/.npm
- npm ci -prefer-offline --registry=https://registry.npmmirror.com
- npm run build
- cd dist && tar -czf ../dist.tgz . && cd ..
- mkdir -p /localcache/apps/${DRONE_REPO_NAME}
- cp dist.tgz /localcache/apps/${DRONE_REPO_NAME}/dist-${DRONE_TAG}.tgz -f
- ls -lah /localcache/apps/${DRONE_REPO_NAME}/dist-${DRONE_TAG}.tgz
2025-11-28 19:00:26 +08:00
- name: java-build
image: registry.cn-beijing.aliyuncs.com/yinzy/maven:jk3.9-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/apps
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:
- mvn -B -DskipTests=true clean package
2025-12-07 21:56:08 -05:00
- ls -lah target/*.jar || (echo "JAR file not found!" && exit 1)
- |
mkdir -p /localcache/apps/${DRONE_REPO_NAME}
JAR_FILE=$(ls target/*.jar 2>/dev/null | head -1)
if [ -n "$JAR_FILE" ]; then
cp "$JAR_FILE" /localcache/apps/${DRONE_REPO_NAME}/ -f
echo "✅ JAR file backed up to /localcache/apps/${DRONE_REPO_NAME}/$(basename $JAR_FILE)"
ls -lh /localcache/apps/${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:
- cp /localcache/apps/${DRONE_REPO_NAME}/dist-${DRONE_TAG}.tgz dist.tgz
- ls -lh dist.tgz
- 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/apps
settings:
api_key:
from_secret: gitea_token
base_url:
from_secret: gitea_base_url
files:
- /localcache/apps/${DRONE_REPO_NAME}/*.jar
- /localcache/apps/${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
- name: push_acr
image: docker:latest
pull: false
volumes:
- name: docker_sock
path: /var/run/docker.sock
environment:
ACR_USER:
from_secret: aliyun_acr_username # 阿里云访问凭证用户名
ACR_PASS:
from_secret: aliyun_acr_password # 阿里云访问凭证密码
ACR_REGISTRY: registry.cn-beijing.aliyuncs.com
ACR_NAMESPACE: yinzy
ACR_REPO: cicd
commands:
- echo "$ACR_PASS" | docker login $ACR_REGISTRY -u "$ACR_USER" --password-stdin
# 后端
- docker tag ${DRONE_REPO_NAME}:latest $ACR_REGISTRY/$ACR_NAMESPACE/$ACR_REPO:back-${DRONE_TAG}
- docker push $ACR_REGISTRY/$ACR_NAMESPACE/$ACR_REPO:back-${DRONE_TAG}
# 前端
- docker tag ${DRONE_REPO_NAME}-frontend:latest $ACR_REGISTRY/$ACR_NAMESPACE/$ACR_REPO:front-${DRONE_TAG}
- docker push $ACR_REGISTRY/$ACR_NAMESPACE/$ACR_REPO:front-${DRONE_TAG}
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