Compare commits

...

3 Commits

Author SHA1 Message Date
2ef6762785 ok 2026-07-06 17:06:48 +08:00
9293fe4e59 基本完美 2026-07-03 14:10:48 +08:00
d4f9607034 bak 2026-07-03 11:06:25 +08:00

View File

@@ -52,6 +52,24 @@ steps:
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u) build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi fi
compose_services=$(docker compose -p "$PROJECT_NAME" config --services)
original_build_list="$build_list"
build_list=""
skipped_list=""
for svc in $original_build_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
build_list="$build_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
build_list=$(echo "$build_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$build_list" ]; then if [ -z "$build_list" ]; then
echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。" echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。"
exit 0 exit 0
@@ -64,12 +82,10 @@ steps:
export TRAEFIK_PREFIX="shoptest" export TRAEFIK_PREFIX="shoptest"
for svc in $build_list; do for svc in $build_list; do
if docker compose -p "$PROJECT_NAME" config --services | grep -q "^$svc$"; then echo ">>>>>> 开始增量构建部署服务: $svc <<<<<<"
echo ">>>>>> 开始增量构建部署服务: $svc <<<<<<" cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-development.env apps/$svc/.env.development
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-development.env apps/$svc/.env.development
fi
done done
docker compose --parallel 8 -p "$PROJECT_NAME" up -d --build $build_list docker compose --parallel 1 -p "$PROJECT_NAME" up -d --build $build_list
volumes: volumes:
- name: pnpm_store - name: pnpm_store
@@ -139,7 +155,7 @@ steps:
echo "本次变更文件:" echo "本次变更文件:"
echo "$changed_files" echo "$changed_files"
full_build_changes=$(echo "$changed_files" | grep -E "^(package\.json|pnpm-lock\.yaml|pnpm-workspace\.yaml|turbo\.json|docker-compose.*\.ya?ml|packages/|patches/)" | wc -l) full_build_changes=$(echo "$changed_files" | grep -E "^(package\.json|pnpm-lock\.yaml|.dockerignore|pnpm-workspace\.yaml|turbo\.json|docker-compose.*\.ya?ml|packages/|patches/)" | wc -l)
PROJECT_NAME_TEST="${PROJECT_NAME}test" PROJECT_NAME_TEST="${PROJECT_NAME}test"
COMPOSE_FILE="docker-compose-test.yml" COMPOSE_FILE="docker-compose-test.yml"
if [ "$full_build_changes" -gt 0 ]; then if [ "$full_build_changes" -gt 0 ]; then
@@ -150,21 +166,36 @@ steps:
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u) build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi fi
compose_services=$(docker compose -f "$COMPOSE_FILE" config --services)
original_build_list="$build_list"
build_list=""
skipped_list=""
for svc in $original_build_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
build_list="$build_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
build_list=$(echo "$build_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$build_list" ]; then if [ -z "$build_list" ]; then
echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。" echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。"
exit 0 exit 0
fi fi
# 3. test 环境
export BUILD_ENV="test" export BUILD_ENV="test"
for svc in $build_list; do 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 <<<<<<"
echo ">>>>>> 构建服务: $svc $PROJECT_NAME_TEST <<<<<<" cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-test.env apps/$svc/.env.test
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-test.env apps/$svc/.env.test # docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" up -d "$svc" --build
# docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" up -d "$svc" --build
fi
done done
docker compose --parallel 8 -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" up -d --build $build_list docker compose --parallel 1 -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" up -d --build $build_list
volumes: volumes:
- name: pnpm_store - name: pnpm_store
@@ -195,6 +226,7 @@ trigger:
- "pnpm-workspace.yaml" - "pnpm-workspace.yaml"
- "turbo.json" - "turbo.json"
- "docker-compose*.yml" - "docker-compose*.yml"
- ".dockerignore"
--- ---
@@ -239,6 +271,24 @@ steps:
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u) build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi fi
compose_services=$(docker compose -f docker-compose.yml config --services)
original_build_list="$build_list"
build_list=""
skipped_list=""
for svc in $original_build_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
build_list="$build_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
build_list=$(echo "$build_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$build_list" ]; then if [ -z "$build_list" ]; then
echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。" echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。"
exit 0 exit 0
@@ -277,10 +327,11 @@ steps:
- git pull origin release - git pull origin release
- docker login harbor.bluettipower.com -u bluetti -p cjJXBbkHlvVWH2B - docker login harbor.bluettipower.com -u bluetti -p cjJXBbkHlvVWH2B
- | - |
diff_failed=0
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER}) changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER}) || diff_failed=1
else else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER}) changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER}) || diff_failed=1
fi fi
export TARGET_SITES="shopify-australia shopify-x" export TARGET_SITES="shopify-australia shopify-x"
@@ -303,6 +354,10 @@ steps:
export BUILD_ENV="production" export BUILD_ENV="production"
export COMMIT_SHA=${DRONE_COMMIT:0:10} export COMMIT_SHA=${DRONE_COMMIT:0:10}
echo "本次变更文件:" echo "本次变更文件:"
if [ "$diff_failed" -eq 1 ]; then
echo "⚠️ 变更范围计算失败,回退为全量部署。"
changed_files="packages/__force_full_deploy__"
fi
echo "$changed_files" echo "$changed_files"
full_build_changes=$(echo "$changed_files" | grep -E "^(package\.json|pnpm-lock\.yaml|pnpm-workspace\.yaml|turbo\.json|docker-compose.*\.ya?ml|packages/|patches/)" | wc -l) full_build_changes=$(echo "$changed_files" | grep -E "^(package\.json|pnpm-lock\.yaml|pnpm-workspace\.yaml|turbo\.json|docker-compose.*\.ya?ml|packages/|patches/)" | wc -l)
@@ -313,19 +368,35 @@ steps:
deploy_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u) deploy_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi fi
compose_services=$(docker compose -f docker-compose-release.yml config --services)
original_deploy_list="$deploy_list"
deploy_list=""
skipped_list=""
for svc in $original_deploy_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
deploy_list="$deploy_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
deploy_list=$(echo "$deploy_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$deploy_list" ]; then if [ -z "$deploy_list" ]; then
echo "未命中可部署服务(仅文档或非关键文件改动),跳过远程部署。" echo "未命中可部署服务(仅文档或非关键文件改动),跳过远程部署。"
exit 0 exit 0
fi fi
for svc in $deploy_list; do for svc in $deploy_list; do
if docker compose -f docker-compose-release.yml config --services | grep -q "^$svc$"; then echo ">>>>>> 远程更新服务: $svc <<<<<<"
echo ">>>>>> 远程更新服务: $svc <<<<<<" cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-production.env apps/$svc/.env.production
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 pull "$svc" docker compose -f docker-compose-release.yml up -d --force-recreate "$svc"
docker compose -f docker-compose-release.yml up -d --force-recreate "$svc" echo ">>>>>> 部署完成: $svc 版本号: $COMMIT_SHA, 环境: $BUILD_ENV <<<<<<"
echo ">>>>>> 部署完成: $svc 版本号: $COMMIT_SHA, 环境: $BUILD_ENV <<<<<<"
fi
done done
volumes: volumes:
- name: pnpm_store - name: pnpm_store
@@ -398,6 +469,24 @@ steps:
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u) build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi fi
compose_services=$(docker compose -f docker-compose.yml config --services)
original_build_list="$build_list"
build_list=""
skipped_list=""
for svc in $original_build_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
build_list="$build_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
build_list=$(echo "$build_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$build_list" ]; then if [ -z "$build_list" ]; then
echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。" echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。"
exit 0 exit 0
@@ -434,13 +523,14 @@ steps:
script: script:
- echo ">>>>>> 开始连接远程服务器 <<<<<<" - echo ">>>>>> 开始连接远程服务器 <<<<<<"
- cd /bluetti/frontend_project/bluetti-shop - cd /bluetti/frontend_project/bluetti-shop
- git pull origin release - git pull origin main
- docker login harbor.bluettipower.com -u bluetti -p cjJXBbkHlvVWH2B - docker login harbor.bluettipower.com -u bluetti -p cjJXBbkHlvVWH2B
- | - |
diff_failed=0
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER}) changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER}) || diff_failed=1
else else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER}) changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER}) || diff_failed=1
fi fi
export TARGET_SITES="shopify-australia shopify-x" export TARGET_SITES="shopify-australia shopify-x"
@@ -450,6 +540,10 @@ steps:
export BUILD_ENV="production" export BUILD_ENV="production"
export COMMIT_SHA=${DRONE_COMMIT:0:10} export COMMIT_SHA=${DRONE_COMMIT:0:10}
echo "本次变更文件:" echo "本次变更文件:"
if [ "$diff_failed" -eq 1 ]; then
echo "⚠️ 变更范围计算失败,回退为全量部署。"
changed_files="packages/__force_full_deploy__"
fi
echo "$changed_files" echo "$changed_files"
full_build_changes=$(echo "$changed_files" | grep -E "^(package\.json|pnpm-lock\.yaml|pnpm-workspace\.yaml|turbo\.json|docker-compose.*\.ya?ml|packages/|patches/)" | wc -l) full_build_changes=$(echo "$changed_files" | grep -E "^(package\.json|pnpm-lock\.yaml|pnpm-workspace\.yaml|turbo\.json|docker-compose.*\.ya?ml|packages/|patches/)" | wc -l)
@@ -460,19 +554,35 @@ steps:
deploy_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u) deploy_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi fi
compose_services=$(docker compose -f docker-compose-prod.yml config --services)
original_deploy_list="$deploy_list"
deploy_list=""
skipped_list=""
for svc in $original_deploy_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
deploy_list="$deploy_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
deploy_list=$(echo "$deploy_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$deploy_list" ]; then if [ -z "$deploy_list" ]; then
echo "未命中可部署服务(仅文档或非关键文件改动),跳过远程部署。" echo "未命中可部署服务(仅文档或非关键文件改动),跳过远程部署。"
exit 0 exit 0
fi fi
for svc in $deploy_list; do for svc in $deploy_list; do
if docker compose -f docker-compose-prod.yml config --services | grep -q "^$svc$"; then echo ">>>>>> 远程更新服务: $svc <<<<<<"
echo ">>>>>> 远程更新服务: $svc <<<<<<" cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-production.env apps/$svc/.env.production
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 pull "$svc" docker compose -f docker-compose-prod.yml up -d --force-recreate "$svc"
docker compose -f docker-compose-prod.yml up -d --force-recreate "$svc" echo ">>>>>> 部署完成: $svc 版本号: $COMMIT_SHA, 环境: $BUILD_ENV <<<<<<"
echo ">>>>>> 部署完成: $svc 版本号: $COMMIT_SHA, 环境: $BUILD_ENV <<<<<<"
fi
done done
volumes: volumes:
@@ -517,6 +627,17 @@ depends_on:
- RC-frontend-monorepo-ci - RC-frontend-monorepo-ci
- PROD-frontend-monorepo-ci - PROD-frontend-monorepo-ci
trigger:
event:
- push
- promote
- rollback
branch:
- dev
- test
- release
- main
steps: steps:
- name: send-dingtalk-notification - name: send-dingtalk-notification
image: lddsb/drone-dingtalk-message image: lddsb/drone-dingtalk-message
@@ -538,15 +659,6 @@ steps:
status: status:
- success - success
- failure - failure
event:
- push
- promote
- rollback
branch:
- dev
- test
- release
- main
volumes: volumes:
- name: dingtalk-tpl - name: dingtalk-tpl