Merge pull request 'feature/0701' (#1) from feature/0701 into master
Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
@@ -7,18 +7,16 @@ clone:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-and-run-apps
|
- name: build-and-run-apps
|
||||||
image: docker:dind
|
image: docker:cli
|
||||||
pull: if-not-exists
|
pull: if-not-exists
|
||||||
volumes:
|
volumes:
|
||||||
- name: docker_sock
|
- name: docker_sock
|
||||||
path: /var/run/docker.sock
|
path: /var/run/docker.sock
|
||||||
- name: docker_lib
|
|
||||||
path: /var/lib/docker
|
|
||||||
- name: configs_dir
|
- name: configs_dir
|
||||||
path: /bluetti/frontend_project/bluetti-shop-configs
|
path: /bluetti/frontend_project/bluetti-shop-configs
|
||||||
environment:
|
environment:
|
||||||
DOCKER_BUILDKIT: 1
|
DOCKER_BUILDKIT: "1"
|
||||||
COMPOSE_DOCKER_CLI_BUILD: 1
|
COMPOSE_DOCKER_CLI_BUILD: "1"
|
||||||
DRONE_COMMIT: ${DRONE_COMMIT}
|
DRONE_COMMIT: ${DRONE_COMMIT}
|
||||||
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
|
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
|
||||||
DRONE_COMMIT_AFTER: ${DRONE_COMMIT_AFTER}
|
DRONE_COMMIT_AFTER: ${DRONE_COMMIT_AFTER}
|
||||||
@@ -26,6 +24,9 @@ steps:
|
|||||||
PROJECT_NAME:
|
PROJECT_NAME:
|
||||||
from_secret: PROJECT_NAME
|
from_secret: PROJECT_NAME
|
||||||
commands:
|
commands:
|
||||||
|
- docker version
|
||||||
|
- docker info
|
||||||
|
- docker buildx version || true
|
||||||
- |
|
- |
|
||||||
if [ "${DRONE_BUILD_EVENT}" = "pull_request" ] || [ "${DRONE_BUILD_EVENT}" = "merge_request" ]; then
|
if [ "${DRONE_BUILD_EVENT}" = "pull_request" ] || [ "${DRONE_BUILD_EVENT}" = "merge_request" ]; then
|
||||||
# 如果是 MR,直接对比目标分支(假设是 dev)
|
# 如果是 MR,直接对比目标分支(假设是 dev)
|
||||||
@@ -51,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
|
||||||
@@ -63,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
|
|
||||||
docker compose -p "$PROJECT_NAME" up -d "$svc" --build
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
docker compose --parallel 1 -p "$PROJECT_NAME" up -d --build $build_list
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: pnpm_store
|
- name: pnpm_store
|
||||||
@@ -106,18 +123,16 @@ type: docker
|
|||||||
name: TEST-frontend-monorepo-ci
|
name: TEST-frontend-monorepo-ci
|
||||||
|
|
||||||
clone:
|
clone:
|
||||||
depth: 50
|
depth: 22
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-and-run-apps
|
- name: build-and-run-apps
|
||||||
image: docker:dind
|
image: docker:cli
|
||||||
volumes:
|
volumes:
|
||||||
- name: docker_sock
|
- name: docker_sock
|
||||||
path: /var/run/docker.sock # 允许在容器内调用宿主机的 Docker
|
path: /var/run/docker.sock # 允许在容器内调用宿主机的 Docker
|
||||||
- name: configs_dir
|
- name: configs_dir
|
||||||
path: /bluetti/frontend_project/bluetti-shop-configs
|
path: /bluetti/frontend_project/bluetti-shop-configs
|
||||||
- name: docker_lib
|
|
||||||
path: /var/lib/docker
|
|
||||||
environment:
|
environment:
|
||||||
DRONE_COMMIT: ${DRONE_COMMIT}
|
DRONE_COMMIT: ${DRONE_COMMIT}
|
||||||
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
|
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
|
||||||
@@ -140,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
|
||||||
@@ -151,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" build "$svc"
|
|
||||||
docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" up -d "$svc" --build
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
docker compose --parallel 1 -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" up -d --build $build_list
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: pnpm_store
|
- name: pnpm_store
|
||||||
@@ -196,6 +226,7 @@ trigger:
|
|||||||
- "pnpm-workspace.yaml"
|
- "pnpm-workspace.yaml"
|
||||||
- "turbo.json"
|
- "turbo.json"
|
||||||
- "docker-compose*.yml"
|
- "docker-compose*.yml"
|
||||||
|
- ".dockerignore"
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -204,14 +235,12 @@ type: docker
|
|||||||
name: RC-frontend-monorepo-ci
|
name: RC-frontend-monorepo-ci
|
||||||
|
|
||||||
clone:
|
clone:
|
||||||
depth: 50
|
depth: 22
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-and-push-apps
|
- name: build-and-push-apps
|
||||||
image: docker:dind
|
image: docker:cli
|
||||||
volumes:
|
volumes:
|
||||||
- name: docker_lib
|
|
||||||
path: /var/lib/docker
|
|
||||||
- name: docker_sock
|
- name: docker_sock
|
||||||
path: /var/run/docker.sock
|
path: /var/run/docker.sock
|
||||||
- name: configs_dir
|
- name: configs_dir
|
||||||
@@ -242,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
|
||||||
@@ -280,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"
|
||||||
@@ -306,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)
|
||||||
@@ -316,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
|
||||||
@@ -365,14 +433,12 @@ type: docker
|
|||||||
name: PROD-frontend-monorepo-ci
|
name: PROD-frontend-monorepo-ci
|
||||||
|
|
||||||
clone:
|
clone:
|
||||||
depth: 50
|
depth: 22
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-and-push-apps
|
- name: build-and-push-apps
|
||||||
image: docker:dind
|
image: docker:cli
|
||||||
volumes:
|
volumes:
|
||||||
- name: docker_lib
|
|
||||||
path: /var/lib/docker
|
|
||||||
- name: docker_sock
|
- name: docker_sock
|
||||||
path: /var/run/docker.sock
|
path: /var/run/docker.sock
|
||||||
- name: configs_dir
|
- name: configs_dir
|
||||||
@@ -403,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
|
||||||
@@ -439,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"
|
||||||
@@ -455,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)
|
||||||
@@ -465,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:
|
||||||
@@ -522,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
|
||||||
@@ -543,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
|
||||||
|
|||||||
@@ -1,63 +1,111 @@
|
|||||||
services:
|
services:
|
||||||
shopify-america:
|
shopify-america:
|
||||||
build:
|
image: harbor.bluettipower.com/bluetti-frontend/shopify-america:${COMMIT_SHA}
|
||||||
context: .
|
container_name: shopify-america
|
||||||
dockerfile: apps/shopify-america/Dockerfile
|
restart: unless-stopped
|
||||||
image: shopify-america:test
|
user: "0:0"
|
||||||
container_name: shopify-america-test
|
|
||||||
restart: always
|
|
||||||
ports:
|
|
||||||
- '3032:3002'
|
|
||||||
labels:
|
labels:
|
||||||
- traefik.http.routers.shoptestqaus.rule=Host(`shop-test-us.bluettipower.com`)
|
- traefik.http.routers.shopus-http.rule=Host(`shop-rc-us.bluettipower.com`)
|
||||||
- traefik.http.routers.shoptestqaus.middlewares=shoptestqaus-cors
|
- traefik.http.routers.shopus-http.entrypoints=http
|
||||||
- traefik.http.middlewares.shoptestqaus-cors.headers.accesscontrolallowmethods=*
|
|
||||||
- traefik.http.middlewares.shoptestqaus-cors.headers.accesscontrolallowheaders=*
|
- traefik.enable=true
|
||||||
- traefik.http.middlewares.shoptestqaus-cors.headers.accesscontrolalloworiginlist=*
|
- traefik.http.routers.shopus-https.rule=Host(`shop-rc-us.bluettipower.com`)
|
||||||
- traefik.http.middlewares.shoptestqaus-redirect.redirectscheme.scheme=https
|
- traefik.http.routers.shopus-https.entrypoints=https
|
||||||
- traefik.http.middlewares.shoptestqaus-redirect.redirectscheme.permanent=true
|
- traefik.http.routers.shopus-https.tls=true
|
||||||
- traefik.http.services.shoptestqaus.loadbalancer.server.port=3002
|
- traefik.http.routers.shopus-https.tls.certresolver=myresolver
|
||||||
- traefik.http.routers.shoptestqaus.tls=true
|
- traefik.http.routers.shopus-https.middlewares=shopus-cors
|
||||||
- traefik.http.routers.shoptestqaus.tls.certresolver=myresolver
|
- traefik.http.services.shopus.loadbalancer.server.port=3002
|
||||||
|
|
||||||
|
- traefik.http.middlewares.shopus-cors.headers.accesscontrolallowmethods=*
|
||||||
|
- traefik.http.middlewares.shopus-cors.headers.accesscontrolallowheaders=*
|
||||||
|
- traefik.http.middlewares.shopus-cors.headers.accesscontrolalloworiginlist=*
|
||||||
|
- traefik.http.middlewares.shopus-redirect.redirectscheme.scheme=https
|
||||||
|
- traefik.http.middlewares.shopus-redirect.redirectscheme.permanent=true
|
||||||
networks:
|
networks:
|
||||||
- traefik
|
- traefik
|
||||||
env_file:
|
env_file:
|
||||||
- apps/shopify-america/.env.test
|
- /bluetti/frontend_project/bluetti-shop-configs/shopify-america-production.env
|
||||||
logging:
|
logging:
|
||||||
driver: json-file
|
driver: json-file
|
||||||
options:
|
options:
|
||||||
max-size: '10m'
|
max-size: '10m'
|
||||||
max-file: '3'
|
max-file: '3'
|
||||||
|
command: sh -c "npm start 2>&1 | tee -a /app/logs/app.log"
|
||||||
|
volumes:
|
||||||
|
- /var/log/shopify-america:/app/logs:rw
|
||||||
|
|
||||||
|
|
||||||
shopify-australia:
|
shopify-australia:
|
||||||
build:
|
image: harbor.bluettipower.com/bluetti-frontend/shopify-australia:${COMMIT_SHA}
|
||||||
context: .
|
container_name: shopify-australia
|
||||||
dockerfile: apps/shopify-australia/Dockerfile
|
restart: unless-stopped
|
||||||
image: shopify-australia:test
|
user: "0:0"
|
||||||
container_name: shopify-australia-test
|
|
||||||
restart: always
|
|
||||||
ports:
|
|
||||||
- '3031:3001'
|
|
||||||
labels:
|
labels:
|
||||||
- traefik.http.routers.shoptestqaau.rule=Host(`shop-test-au.bluettipower.com`)
|
# 移除 http 跳转相关的 middleware,即不要为 http 路由配置 redirectscheme
|
||||||
- traefik.http.routers.shoptestqaau.middlewares=shoptestqaau-cors
|
- traefik.http.routers.shopau-http.rule=Host(`shop-rc-au.bluettipower.com`)
|
||||||
- traefik.http.middlewares.shoptestqaau-cors.headers.accesscontrolallowmethods=*
|
- traefik.http.routers.shopau-http.entrypoints=http
|
||||||
- traefik.http.middlewares.shoptestqaau-cors.headers.accesscontrolallowheaders=*
|
|
||||||
- traefik.http.middlewares.shoptestqaau-cors.headers.accesscontrolalloworiginlist=*
|
- traefik.enable=true
|
||||||
- traefik.http.middlewares.shoptestqaau-redirect.redirectscheme.scheme=https
|
- traefik.http.routers.shopau-https.rule=Host(`shop-rc-au.bluettipower.com`)
|
||||||
- traefik.http.middlewares.shoptestqaau-redirect.redirectscheme.permanent=true
|
- traefik.http.routers.shopau-https.entrypoints=https
|
||||||
- traefik.http.services.shoptestqaau.loadbalancer.server.port=3001
|
- traefik.http.routers.shopau-https.tls=true
|
||||||
- traefik.http.routers.shoptestqaau.tls=true
|
- traefik.http.routers.shopau-https.tls.certresolver=myresolver
|
||||||
- traefik.http.routers.shoptestqaau.tls.certresolver=myresolver
|
- traefik.http.routers.shopau-https.middlewares=shopau-cors
|
||||||
|
- traefik.http.services.shopau.loadbalancer.server.port=3001
|
||||||
|
|
||||||
|
- traefik.http.middlewares.shopau-cors.headers.accesscontrolallowmethods=*
|
||||||
|
- traefik.http.middlewares.shopau-cors.headers.accesscontrolallowheaders=*
|
||||||
|
- traefik.http.middlewares.shopau-cors.headers.accesscontrolalloworiginlist=*
|
||||||
|
- traefik.http.middlewares.shopau-redirect.redirectscheme.scheme=https
|
||||||
|
- traefik.http.middlewares.shopau-redirect.redirectscheme.permanent=true
|
||||||
networks:
|
networks:
|
||||||
- traefik
|
- traefik
|
||||||
env_file:
|
env_file:
|
||||||
- apps/shopify-australia/.env.test
|
- /bluetti/frontend_project/bluetti-shop-configs/shopify-australia-production.env
|
||||||
logging:
|
logging:
|
||||||
driver: json-file
|
driver: json-file
|
||||||
options:
|
options:
|
||||||
max-size: '10m'
|
max-size: '10m'
|
||||||
max-file: '3'
|
max-file: '3'
|
||||||
|
command: sh -c "npm start 2>&1 | tee -a /app/logs/app.log"
|
||||||
|
volumes:
|
||||||
|
- /var/log/shopify-australia:/app/logs:rw
|
||||||
|
|
||||||
|
shopify-europe:
|
||||||
|
image: harbor.bluettipower.com/bluetti-frontend/shopify-europe:${COMMIT_SHA}
|
||||||
|
container_name: shopify-europe
|
||||||
|
restart: unless-stopped
|
||||||
|
user: "0:0"
|
||||||
|
labels:
|
||||||
|
# 移除 http 跳转相关的 middleware,即不要为 http 路由配置 redirectscheme
|
||||||
|
- traefik.http.routers.shopeu-http.rule=Host(`shop-rc-eu.bluettipower.com`)
|
||||||
|
- traefik.http.routers.shopeu-http.entrypoints=http
|
||||||
|
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.shopeu-https.rule=Host(`shop-rc-eu.bluettipower.com`)
|
||||||
|
- traefik.http.routers.shopeu-https.entrypoints=https
|
||||||
|
- traefik.http.routers.shopeu-https.tls=true
|
||||||
|
- traefik.http.routers.shopeu-https.tls.certresolver=myresolver
|
||||||
|
- traefik.http.routers.shopeu-https.middlewares=shopeu-cors
|
||||||
|
- traefik.http.services.shopeu.loadbalancer.server.port=3005
|
||||||
|
|
||||||
|
- traefik.http.middlewares.shopeu-cors.headers.accesscontrolallowmethods=*
|
||||||
|
- traefik.http.middlewares.shopeu-cors.headers.accesscontrolallowheaders=*
|
||||||
|
- traefik.http.middlewares.shopeu-cors.headers.accesscontrolalloworiginlist=*
|
||||||
|
- traefik.http.middlewares.shopeu-redirect.redirectscheme.scheme=https
|
||||||
|
- traefik.http.middlewares.shopeu-redirect.redirectscheme.permanent=true
|
||||||
|
networks:
|
||||||
|
- traefik
|
||||||
|
env_file:
|
||||||
|
- /bluetti/frontend_project/bluetti-shop-configs/shopify-europe-production.env
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: '10m'
|
||||||
|
max-file: '3'
|
||||||
|
command: sh -c "npm start 2>&1 | tee -a /app/logs/app.log"
|
||||||
|
volumes:
|
||||||
|
- /var/log/shopify-europe:/app/logs:rw
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
traefik:
|
traefik:
|
||||||
|
|||||||
Reference in New Issue
Block a user