1- name : Release DongTai IAST MySQL Image (Manual)
1+ name : Release DongTai IAST MySQL Image (Manual, x86 )
22
33on :
44 workflow_dispatch :
99 default : " v1.0.0"
1010
1111jobs :
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
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