新增版本控制
This commit is contained in:
381
20260320_front.yaml
Normal file
381
20260320_front.yaml
Normal file
@@ -0,0 +1,381 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: DEV-frontend-monorepo-ci
|
||||
|
||||
# 定义变量,方便复用
|
||||
clone:
|
||||
depth: 50 # 保证 git diff 能获取到历史记录
|
||||
|
||||
steps:
|
||||
# 步骤 1: 准备依赖并构建共享包 (Workspace 模式)
|
||||
- name: install-and-build-common
|
||||
image: node:24.14.0 # 直接使用你需要的 Node 版本镜像
|
||||
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
|
||||
- echo "依赖安装完成"
|
||||
- pnpm --filter '@repo/*' build
|
||||
- echo "共享包构建完成"
|
||||
|
||||
# 步骤 2: 核心构建逻辑(包含路径检测、Docker 构建与推送)
|
||||
- name: build-and-run-apps
|
||||
image: docker:dind # 使用包含 docker 和 compose 的镜像
|
||||
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}
|
||||
# SHOP_US: shop-dev-us.bluettipower.com
|
||||
# SHOP_AU: shop-dev-au.bluettipower.com
|
||||
# SHOP_IT: shop-dev-it.bluettipower.com
|
||||
# SHOP_ES: shop-dev-es.bluettipower.com
|
||||
# SHOP_EU: shop-dev-eu.bluettipower.com
|
||||
# SHOP_DE: shop-dev-de.bluettipower.com
|
||||
# SHOP_CA: shop-dev-ca.bluettipower.com
|
||||
# SHOP_UK: shop-dev-uk.bluettipower.com
|
||||
# SHOP_IE: shop-dev-ie.bluettipower.com
|
||||
# SHOP_BR: shop-dev-br.bluettipower.com
|
||||
# SHOP_MX: shop-dev-mx.bluettipower.com
|
||||
# SHOP_FR: shop-dev-fr.bluettipower.com
|
||||
# SHOP_PH: shop-dev-ph.bluettipower.com
|
||||
# SHOP_KR: shop-dev-kr.bluettipower.com
|
||||
# SHOP_JP: shop-dev-jp.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)
|
||||
if [ "$common_changes" -gt 0 ]; then
|
||||
echo "检测到公共区变动,准备全量构建..."
|
||||
build_list=$(docker compose config --services)
|
||||
else
|
||||
echo "执行定向增量构建..."
|
||||
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
|
||||
fi
|
||||
|
||||
# 3. 循环执行构建与推送 (复用你之前的逻辑)
|
||||
export BUILD_ENV="development"
|
||||
for svc in $build_list; do
|
||||
if docker compose -p "$PROJECT_NAME" config --services | grep -q "^$svc$"; then
|
||||
echo ">>>>>> 构建服务: $svc $PROJECT_NAME <<<<<<"
|
||||
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 --force-recreate "$svc"
|
||||
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:
|
||||
- dev
|
||||
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
|
||||
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
|
||||
- pull_request
|
||||
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
|
||||
|
||||
volumes:
|
||||
- name: pnpm_store
|
||||
host:
|
||||
path: /tmp/pnpm-cache
|
||||
- name: docker_sock
|
||||
host:
|
||||
path: /var/run/docker.sock
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- main
|
||||
event:
|
||||
include:
|
||||
- push
|
||||
- pull_request
|
||||
paths:
|
||||
include:
|
||||
- 'apps/**'
|
||||
- 'package.json'
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: CI-notify
|
||||
|
||||
clone:
|
||||
disable: true
|
||||
|
||||
depends_on:
|
||||
- DEV-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
|
||||
- release
|
||||
- main
|
||||
|
||||
volumes:
|
||||
- name: dingtalk-tpl
|
||||
host:
|
||||
path: /bluetti/drone/data
|
||||
Reference in New Issue
Block a user