Skip to content

Commit eb08b35

Browse files
committed
feat(ci):优化 MySQL 镜像构建流程并增强网络配置
- 更新工作流名称以明确支持 x86 架构 - 重构 jobs 名称为 build-mysql以提高可读性- 移除旧的服务定义方式,改用自定义 Docker 网络- 添加创建和清理 Docker 自定义网络的步骤 - 明确启动 MySQL 和 Redis 容器于同一网络中- 增加等待 MySQL 就绪的检查机制- 拉取 dongtai-server 镜像并在相同网络内执行迁移 - 导出数据库结构时增加错误日志输出 - 构建和推送 MySQL 5.7与 8.0 镜像标签保持一致 - 增加构建前后的 Webhook通知功能 - 在流程结束时确保清理所有临时容器和网络资源
1 parent c223591 commit eb08b35

File tree

1 file changed

+78
-27
lines changed

1 file changed

+78
-27
lines changed

.github/workflows/manual_base_image.yaml

Lines changed: 78 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Release DongTai IAST MySQL Image (Manual)
1+
name: Release DongTai IAST MySQL Image (Manual, x86)
22

33
on:
44
workflow_dispatch:
@@ -9,20 +9,19 @@ on:
99
default: "v1.0.0"
1010

1111
jobs:
12-
dongtai-mysql:
13-
name: Build and Push DongTai MySQL Image (x86 only)
12+
build-mysql:
1413
runs-on: ubuntu-latest
15-
services:
16-
dongtai-mysql:
17-
image: dongtai/dongtai-mysql:latest
18-
ports:
19-
- 3306:3306
20-
dongtai-redis:
21-
image: dongtai/dongtai-redis:latest
22-
ports:
23-
- 6379:6379
24-
14+
env:
15+
MYSQL_ROOT_PASSWORD: dongtai-iast
16+
NETWORK_NAME: dongtai_net
2517
steps:
18+
- name: start-build webhook
19+
uses: joelwmale/webhook-action@master
20+
with:
21+
url: ${{ secrets.WEBHOOK_URL }}
22+
body: >
23+
{"msg_type":"interactive","card":{"config":{"wide_screen_mode":true,"enable_forward":true},"elements":[{"tag":"div","text":{"content":"状态:构建开始\n项目:${{github.repository}}\n流程:${{github.workflow}}\n触发者:${{github.actor}}\n手动输入版本:${{ github.event.inputs.tag_name }}\n","tag":"lark_md"}}]}}
24+
2625
- name: Checkout
2726
uses: actions/checkout@v3
2827

@@ -48,24 +47,60 @@ jobs:
4847
ID=$(echo ${TAG_NAME##v})
4948
echo "version=$ID" >> $GITHUB_OUTPUT
5049
51-
- name: Pull and migrate database
50+
- name: Create user Docker network
51+
run: |
52+
if docker network ls --format '{{.Name}}' | grep -q "^${NETWORK_NAME}$"; then
53+
echo "network ${NETWORK_NAME} already exists"
54+
else
55+
docker network create ${NETWORK_NAME}
56+
echo "created network ${NETWORK_NAME}"
57+
fi
58+
59+
- name: Start MySQL and Redis containers (on custom network)
60+
run: |
61+
# 启动 mysql(使用 dongtai/dongtai-mysql 镜像,确保镜像包含你需要的初始化)
62+
docker run -d --name dongtai-mysql --network ${NETWORK_NAME} -e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} dongtai/dongtai-mysql:latest || (docker logs dongtai-mysql && exit 1)
63+
# 启动 redis(仅作为依赖)
64+
docker run -d --name dongtai-redis --network ${NETWORK_NAME} redis:6-alpine || (docker logs dongtai-redis && exit 1)
65+
echo "MySQL & Redis started"
66+
67+
- name: Wait for MySQL ready
68+
run: |
69+
set -e
70+
n=0
71+
until docker exec dongtai-mysql mysql -u root -p'${MYSQL_ROOT_PASSWORD}' -e "SELECT 1" >/dev/null 2>&1; do
72+
n=$((n+1))
73+
echo "waiting mysql... attempt=$n"
74+
if [ $n -ge 30 ]; then
75+
echo "mysql not ready after 30 attempts"
76+
docker logs dongtai-mysql || true
77+
exit 1
78+
fi
79+
sleep 2
80+
done
81+
echo "mysql is ready"
82+
83+
- name: Pull dongtai-server image
84+
run: |
85+
docker pull wukong.tencentcloudcr.com/dongtai/dongtai-server:${{ steps.release.outputs.version }} || (echo "pull failed" && exit 1)
86+
echo "pulled dongtai-server:${{ steps.release.outputs.version }}"
87+
88+
- name: Run migrate in same network and export schema
5289
working-directory: ./mysql
5390
run: |
54-
echo "开始拉取 dongtai-server:${{ steps.release.outputs.version }}"
55-
docker pull wukong.tencentcloudcr.com/dongtai/dongtai-server:${{ steps.release.outputs.version }}
56-
echo "执行 migrate 初始化数据库结构..."
57-
docker run -i --name dongtai-server-update \
91+
set -e
92+
# 以同一个网络启动临时容器来运行 migrate,保证能访问 dongtai-mysql & dongtai-redis
93+
docker run --rm --name dongtai-server-migrate --network ${NETWORK_NAME} \
5894
-v $(pwd)/config-tutorial.ini:/opt/dongtai/dongtai_conf/conf/config.ini \
59-
--rm \
60-
--link $(docker ps | grep dongtai-mysql | awk '{print $1}')":dongtai-mysql" \
61-
--link $(docker ps | grep dongtai-redis | awk '{print $1}')":dongtai-redis" \
62-
wukong.tencentcloudcr.com/dongtai/dongtai-server:${{ steps.release.outputs.version }} migrate || exit 1
95+
wukong.tencentcloudcr.com/dongtai/dongtai-server:${{ steps.release.outputs.version }} migrate || (docker logs dongtai-server-migrate || true; echo "migrate failed"; exit 1)
6396
64-
echo "导出数据库结构为 dongtai-mysql-schema.sql..."
65-
docker exec -i $(docker ps | grep dongtai-mysql | awk '{print $1}') /bin/bash -c \
66-
"mysqldump dongtai_webapi -u root -p'dongtai-iast' --single-transaction" > dongtai-mysql-schema.sql || exit 1
97+
# 导出 schema(将数据导出到 runner 工作目录)
98+
docker exec -i $(docker ps -aqf "name=dongtai-mysql") /bin/bash -c \
99+
"mysqldump dongtai_webapi -u root -p'${MYSQL_ROOT_PASSWORD}' --single-transaction" > dongtai-mysql-schema.sql || (docker logs dongtai-mysql && exit 1)
100+
echo "exported schema to dongtai-mysql-schema.sql"
101+
ls -l dongtai-mysql-schema.sql
67102
68-
- name: Build and Push MySQL 5.7 Image
103+
- name: Build and Push MySQL image (5.7)
69104
uses: docker/build-push-action@v3
70105
with:
71106
context: ./mysql
@@ -80,7 +115,7 @@ jobs:
80115
run: |
81116
sed -i 's#5.7#8.0#g' Dockerfile
82117
83-
- name: Build and Push MySQL 8.0 Image
118+
- name: Build and Push MySQL image (8.0)
84119
uses: docker/build-push-action@v3
85120
with:
86121
context: ./mysql
@@ -89,3 +124,19 @@ jobs:
89124
tags: |
90125
dongtai/dongtai-mysql-8:${{ steps.release.outputs.version }}
91126
dongtai/dongtai-mysql-8:latest
127+
128+
- name: Cleanup containers and network
129+
if: always()
130+
run: |
131+
docker rm -f dongtai-server-migrate || true
132+
docker rm -f dongtai-mysql || true
133+
docker rm -f dongtai-redis || true
134+
docker network rm ${NETWORK_NAME} || true
135+
136+
- name: finish-build webhook
137+
if: always()
138+
uses: joelwmale/webhook-action@master
139+
with:
140+
url: ${{ secrets.WEBHOOK_URL }}
141+
body: >
142+
{"msg_type":"interactive","card":{"config":{"wide_screen_mode":true,"enable_forward":true},"elements":[{"tag":"div","text":{"content":"状态:构建完成\n项目:${{github.repository}}\n触发者:${{github.actor}}\n版本:${{ github.event.inputs.tag_name }}\n","tag":"lark_md"}}]}}

0 commit comments

Comments
 (0)