新增版本控制

This commit is contained in:
2026-07-01 16:20:26 +08:00
parent 5dbfdec2b5
commit 9f6a5afae2
15 changed files with 3283 additions and 0 deletions

509
20260630_front.yaml Normal file
View File

@@ -0,0 +1,509 @@
kind: pipeline
type: docker
name: DEV-frontend-monorepo-ci
clone:
depth: 50
steps:
- name: install-and-build-common
image: node:24.14.0
volumes:
- name: pnpm_store
path: /root/.local/share/pnpm/store # 挂载 pnpm 缓存
commands:
- corepack enable
- corepack prepare pnpm@9.15.4 --activate
- pnpm install --frozen-lockfile
- pnpm --filter '@repo/*' build
- name: build-and-run-apps
image: docker:dind
pull: if-not-exists
volumes:
- name: docker_sock
path: /var/run/docker.sock
- name: configs_dir
path: /bluetti/frontend_project/bluetti-shop-configs
environment:
DRONE_COMMIT: ${DRONE_COMMIT}
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
DRONE_COMMIT_AFTER: ${DRONE_COMMIT_AFTER}
DRONE_BUILD_EVENT: ${DRONE_BUILD_EVENT} # 引入事件类型判断
PROJECT_NAME:
from_secret: PROJECT_NAME
commands:
- |
if [ "${DRONE_BUILD_EVENT}" = "pull_request" ] || [ "${DRONE_BUILD_EVENT}" = "merge_request" ]; then
# 如果是 MR直接对比目标分支假设是 dev
git fetch origin dev:dev
changed_files=$(git diff --name-only dev...HEAD)
elif [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ] || [ -z "${DRONE_COMMIT_BEFORE}" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER})
else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER})
fi
# 2. 判断构建范围
common_changes=$(echo "$changed_files" | grep -v "^apps/" | wc -l)
if [ "$common_changes" -gt 0 ]; then
echo "检测到公共区/配置文件变动,准备全量构建..."
build_list=$(docker compose -p "$PROJECT_NAME" config --services)
else
echo "执行定向增量构建..."
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
# 3. 设置部署环境变量
export BUILD_ENV="development"
export CONTAINER_SUFFIX=""
export IMAGE_TAG="dev"
export TRAEFIK_PREFIX="shoptest"
for svc in $build_list; do
if docker compose -p "$PROJECT_NAME" config --services | grep -q "^$svc$"; then
echo ">>>>>> 开始增量构建部署服务: $svc <<<<<<"
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-development.env apps/$svc/.env.development
# docker compose -p "$PROJECT_NAME" build "$svc"
docker compose -p "$PROJECT_NAME" up -d "$svc" --build
fi
done
volumes:
- name: pnpm_store
host:
path: /tmp/pnpm-cache
- name: configs_dir
host:
path: /bluetti/frontend_project/bluetti-shop-configs
- name: docker_sock
host:
path: /var/run/docker.sock
trigger:
branch:
- dev
event:
include:
- push
- merge_request
---
kind: pipeline
type: docker
name: TEST-frontend-monorepo-ci
clone:
depth: 50
steps:
- name: install-and-build-common
image: node:24.14.0
volumes:
- name: pnpm_store
path: /root/.local/share/pnpm/store # 挂载 pnpm 缓存
commands:
- corepack enable
- corepack prepare pnpm@9.15.4 --activate
- pnpm install --frozen-lockfile
- pnpm --filter '@repo/*' build
- name: build-and-run-apps
image: docker:dind
volumes:
- name: docker_sock
path: /var/run/docker.sock # 允许在容器内调用宿主机的 Docker
- name: configs_dir
path: /bluetti/frontend_project/bluetti-shop-configs
environment:
DRONE_COMMIT: ${DRONE_COMMIT}
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
DRONE_COMMIT_AFTER: ${DRONE_COMMIT_AFTER}
PROJECT_NAME:
from_secret: PROJECT_NAME
# SHOP_AU: shop-test-au.bluettipower.com
commands:
- |
# 1. 路径变动检测逻辑
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER})
else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER})
fi
# 2. 判断构建范围
common_changes=$(echo "$changed_files" | grep -v "^apps/" | wc -l)
PROJECT_NAME_TEST="${PROJECT_NAME}test"
COMPOSE_FILE="docker-compose-test.yml"
if [ "$common_changes" -gt 0 ]; then
echo "检测到公共区变动,准备全量构建..."
build_list=$(docker compose -f "$COMPOSE_FILE" config --services)
else
echo "执行定向增量构建..."
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
# 3. test 环境
export BUILD_ENV="test"
for svc in $build_list; do
if docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" config --services | grep -q "^$svc$"; then
echo ">>>>>> 构建服务: $svc $PROJECT_NAME_TEST <<<<<<"
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-test.env apps/$svc/.env.test
# docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" build "$svc"
docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" up -d "$svc" --build
fi
done
volumes:
- name: pnpm_store
host:
path: /tmp/pnpm-cache # 宿主机路径,用于跨流水线共享 node_modules
- name: configs_dir
host:
path: /bluetti/frontend_project/bluetti-shop-configs
- name: docker_sock
host:
path: /var/run/docker.sock
trigger:
branch:
- test
event:
include:
- push
- merge_request
paths:
include:
- 'apps/**' # 只要 apps 目录下有变动就启动
- 'pnpm-workspace.yaml'
- 'package.json'
---
kind: pipeline
type: docker
name: RC-frontend-monorepo-ci
clone:
depth: 50
steps:
- name: install-and-build-common
image: node:24.14.0
environment:
DOCKER_BUILDKIT: "1"
COMPOSE_DOCKER_CLI_BUILD: "1"
volumes:
- name: pnpm_store
path: /root/.local/share/pnpm/store
commands:
- corepack enable
- corepack prepare pnpm@9.15.4 --activate
- pnpm install --frozen-lockfile
- echo "依赖安装完成"
- pnpm --filter '@repo/*' build
- echo "共享包构建完成"
- name: build-and-push-apps
image: docker:dind
volumes:
- name: docker_sock
path: /var/run/docker.sock
environment:
DRONE_COMMIT: ${DRONE_COMMIT}
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
DRONE_COMMIT_AFTER: ${DRONE_COMMIT_AFTER}
commands:
- |
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER})
else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER})
fi
common_changes=$(echo "$changed_files" | grep -v "^apps/" | wc -l)
if [ "$common_changes" -gt 0 ]; then
echo "检测到公共区变动,准备全量构建..."
build_list=$(docker compose -f docker-compose.yml config --services)
else
echo "执行定向增量构建..."
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
> .deploy_list
docker login 127.0.0.1:5000 -u bluetti -p cjJXBbkHlvVWH2B
for svc in $build_list; do
if docker compose -p "$PROJECT_NAME" config --services | grep -q "^$svc$"; then
echo ">>>>>> 构建服务: $svc <<<<<<"
docker compose -p "$PROJECT_NAME" build "$svc"
harbor_tag="127.0.0.1:5000/bluetti-frontend/$svc:${DRONE_COMMIT:0:10}"
docker tag "$svc:latest" "$harbor_tag"
echo ">>>>>> 推送服务: $svc <<<<<<"
docker push "$harbor_tag"
echo "$svc" >> .deploy_list
echo ">>>>>> 推送完成,$svc 服务版本号: ${DRONE_COMMIT:0:10}"
fi
done
- name: ssh-deploy
image: appleboy/drone-ssh
settings:
host: 47.253.60.94
username: root
key:
from_secret: remote_ssh_key
port: 22
environment:
- COMMIT_SHA=${DRONE_COMMIT:0:10}
- BUILD_ENV="production"
command_timeout: 15m
script:
- echo ">>>>>> 开始连接远程服务器 <<<<<<"
- cd /bluetti/frontend_project/bluetti-shop
- git pull origin release
- docker login harbor.bluettipower.com -u bluetti -p cjJXBbkHlvVWH2B
- |
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER})
else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER})
fi
export TARGET_SITES="shopify-australia shopify-x"
export SHOP_US="shop-rc-us.bluettipower.com"
export SHOP_AU="shop-rc-au.bluettipower.com"
export SHOP_IT="shop-rc-it.bluettipower.com"
export SHOP_ES="shop-rc-es.bluettipower.com"
export SHOP_EU="shop-rc-eu.bluettipower.com"
export SHOP_DE="shop-rc-de.bluettipower.com"
export SHOP_CA="shop-rc-ca.bluettipower.com"
export SHOP_UK="shop-rc-uk.bluettipower.com"
export SHOP_IE="shop-rc-ie.bluettipower.com"
export SHOP_BR="shop-rc-br.bluettipower.com"
export SHOP_MX="shop-rc-mx.bluettipower.com"
export SHOP_FR="shop-rc-fr.bluettipower.com"
export SHOP_PH="shop-rc-ph.bluettipower.com"
export SHOP_KR="shop-rc-kr.bluettipower.com"
export SHOP_JP="shop-rc-jp.bluettipower.com"
export BUILD_ENV="production"
export COMMIT_SHA=${DRONE_COMMIT:0:10}
common_changes=$(echo "$changed_files" | grep -v "^apps/" | wc -l)
if [ "$common_changes" -gt 0 ]; then
echo "检测到公共区变动,远程全量更新..."
deploy_list=$(docker compose -f docker-compose-release.yml config --services)
else
deploy_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
for svc in $deploy_list; do
if docker compose -f docker-compose-release.yml config --services | grep -q "^$svc$"; then
echo ">>>>>> 远程更新服务: $svc <<<<<<"
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-production.env apps/$svc/.env.production
docker compose -f docker-compose-release.yml pull "$svc"
docker compose -f docker-compose-release.yml up -d --force-recreate "$svc"
echo ">>>>>> 部署完成: $svc 版本号: $COMMIT_SHA, 环境: $BUILD_ENV <<<<<<"
fi
done
volumes:
- name: pnpm_store
host:
path: /tmp/pnpm-cache
- name: docker_sock
host:
path: /var/run/docker.sock
trigger:
branch:
- release
event:
include:
- push
paths:
include:
- 'apps/**'
- 'package.json'
---
kind: pipeline
type: docker
name: PROD-frontend-monorepo-ci
clone:
depth: 50
steps:
- name: install-and-build-common
image: node:24.14.0
volumes:
- name: pnpm_store
path: /root/.local/share/pnpm/store
commands:
- corepack enable
- corepack prepare pnpm@9.15.4 --activate
- pnpm install --frozen-lockfile
- echo "依赖安装完成"
- pnpm --filter '@repo/*' build
- echo "共享包构建完成"
- name: build-and-push-apps
image: docker:dind
volumes:
- name: docker_sock
path: /var/run/docker.sock
environment:
DRONE_COMMIT: ${DRONE_COMMIT}
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
DRONE_COMMIT_AFTER: ${DRONE_COMMIT_AFTER}
commands:
- |
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER})
else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER})
fi
common_changes=$(echo "$changed_files" | grep -v "^apps/" | wc -l)
if [ "$common_changes" -gt 0 ]; then
echo "检测到公共区变动,准备全量构建..."
build_list=$(docker compose -f docker-compose.yml config --services)
else
echo "执行定向增量构建..."
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
> .deploy_list
docker login 127.0.0.1:5000 -u bluetti -p cjJXBbkHlvVWH2B
for svc in $build_list; do
if docker compose -p "$PROJECT_NAME" config --services | grep -q "^$svc$"; then
echo ">>>>>> 构建服务: $svc <<<<<<"
docker compose -p "$PROJECT_NAME" build "$svc"
harbor_tag="127.0.0.1:5000/bluetti-frontend/$svc:${DRONE_COMMIT:0:10}"
docker tag "$svc:latest" "$harbor_tag"
echo ">>>>>> 推送服务: $svc <<<<<<"
docker push "$harbor_tag"
echo "$svc" >> .deploy_list
echo ">>>>>> 推送完成,$svc 服务版本号: ${DRONE_COMMIT:0:10}"
fi
done
- name: ssh-deploy
image: appleboy/drone-ssh
settings:
# 这里SSH 日本服务器 10.16.16.130:10007 德国服务踌躇10.16.16.130:10008
host: 10.16.16.130
username: cloudapp
key:
from_secret: remote_ssh_key
port: 10008
environment:
- COMMIT_SHA=${DRONE_COMMIT:0:10}
- BUILD_ENV="production"
command_timeout: 15m
script:
- echo ">>>>>> 开始连接远程服务器 <<<<<<"
- cd /bluetti/frontend_project/bluetti-shop
- git pull origin release
- docker login harbor.bluettipower.com -u bluetti -p cjJXBbkHlvVWH2B
- |
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER})
else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER})
fi
export TARGET_SITES="shopify-australia shopify-x"
export SHOP_US="shop-us.bluettipower.com"
export SHOP_AU="shop-au.bluettipower.com"
export BUILD_ENV="production"
export COMMIT_SHA=${DRONE_COMMIT:0:10}
common_changes=$(echo "$changed_files" | grep -v "^apps/" | wc -l)
if [ "$common_changes" -gt 0 ]; then
echo "检测到公共区变动,远程全量更新..."
deploy_list=$(docker compose -f docker-compose-prod.yml config --services)
else
deploy_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
for svc in $deploy_list; do
if docker compose -f docker-compose-prod.yml config --services | grep -q "^$svc$"; then
echo ">>>>>> 远程更新服务: $svc <<<<<<"
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-production.env apps/$svc/.env.production
docker compose -f docker-compose-prod.yml pull "$svc"
docker compose -f docker-compose-prod.yml up -d --force-recreate "$svc"
echo ">>>>>> 部署完成: $svc 版本号: $COMMIT_SHA, 环境: $BUILD_ENV <<<<<<"
fi
done
volumes:
- name: pnpm_store
host:
path: /tmp/pnpm-cache
- name: docker_sock
host:
path: /var/run/docker.sock
trigger:
branch:
- main
event:
include:
- push
paths:
include:
- 'apps/**'
- 'package.json'
---
kind: pipeline
type: docker
name: CI-notify
clone:
disable: true
depends_on:
- DEV-frontend-monorepo-ci
- TEST-frontend-monorepo-ci
- RC-frontend-monorepo-ci
- PROD-frontend-monorepo-ci
steps:
- name: send-dingtalk-notification
image: lddsb/drone-dingtalk-message
volumes:
- name: dingtalk-tpl
path: /data
settings:
# token: 95b118a31f95c328b1c5f7f52622997d77b69da9d393b0700fc8eb33ed551713
# secret: SECb355ff4ba5b05b5325d4c67d3f6637c75613668c248ad9cc97355fe266fe1b6a
# token: 8a47605751760b1b1af660e67c2f39bdf9f83c672a18ab872412e99c78b0e5c0
# secret: SEC0dfa30e4e8acfae69e7bf42b19c2feff5d302d2667de3aa4ba8cff46e867758a
token: 94892495526ab4eddf5796170c8cf388697526180588f0b4cc2c8aefd3b85eb2
secret: SECbb3d7f34ee21f0268fcb093357033e94a2a0cd340be02d36ac2a59a8001b5ffa
type: markdown
debug: false
tpl: /data/dingtalk_${DRONE_BUILD_EVENT}.tpl
tips_title: 构建通知 - ${DRONE_BRANCH}
when:
status:
- success
- failure
- started
event:
- push
- promote
- rollback
branch:
- dev
- test
- release
- main
volumes:
- name: dingtalk-tpl
host:
path: /bluetti/drone/data