Skip to content

Manual DongTai IAST Base Image #3

Manual DongTai IAST Base Image

Manual DongTai IAST Base Image #3

name: Release DongTai IAST MySQL Image (Manual, x86)
on:
workflow_dispatch:
inputs:
tag_name:
description: "请输入要构建的版本号(例如 v1.17.7)"
required: true
default: "v1.0.0"
jobs:
build-mysql:
runs-on: ubuntu-latest
env:
MYSQL_ROOT_PASSWORD: dongtai-iast
NETWORK_NAME: dongtai_net
steps:
- name: start-build webhook
uses: joelwmale/webhook-action@master
with:
url: ${{ secrets.WEBHOOK_URL }}
body: >
{"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"}}]}}
- name: Checkout
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DONGTAI_DOCKERHUB_USERNAME }}
password: ${{ secrets.DONGTAI_DOCKERHUB_TOKEN }}
- name: Login to AliyunRegistry
uses: docker/login-action@v2
with:
registry: ${{ secrets.ALIYUN_REGISTRY }}
username: ${{ secrets.ALIYUN_DOCKERHUB_USER }}
password: ${{ secrets.ALIYUN_DOCKERHUB_PASSWORD }}
- id: release
run: |
TAG_NAME=${{ github.event.inputs.tag_name }}
ID=$(echo ${TAG_NAME##v})
echo "version=$ID" >> $GITHUB_OUTPUT
- name: Create user Docker network
run: |
if docker network ls --format '{{.Name}}' | grep -q "^${NETWORK_NAME}$"; then
echo "network ${NETWORK_NAME} already exists"
else
docker network create ${NETWORK_NAME}
echo "created network ${NETWORK_NAME}"
fi
- name: Start MySQL and Redis containers (on custom network)
run: |
# 启动 mysql(使用 dongtai/dongtai-mysql 镜像,确保镜像包含你需要的初始化)
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)
# 启动 redis(仅作为依赖)
docker run -d --name dongtai-redis --network ${NETWORK_NAME} redis:6-alpine || (docker logs dongtai-redis && exit 1)
echo "MySQL & Redis started"
- name: Wait for MySQL ready
run: |
set -e
n=0
until docker exec dongtai-mysql mysql -u root -p'${MYSQL_ROOT_PASSWORD}' -e "SELECT 1" >/dev/null 2>&1; do
n=$((n+1))
echo "waiting mysql... attempt=$n"
if [ $n -ge 30 ]; then
echo "mysql not ready after 30 attempts"
docker logs dongtai-mysql || true
exit 1
fi
sleep 2
done
echo "mysql is ready"
- name: Pull dongtai-server image
run: |
docker pull wukong.tencentcloudcr.com/dongtai/dongtai-server:${{ steps.release.outputs.version }} || (echo "pull failed" && exit 1)
echo "pulled dongtai-server:${{ steps.release.outputs.version }}"
- name: Run migrate in same network and export schema
working-directory: ./mysql
run: |
set -e
# 以同一个网络启动临时容器来运行 migrate,保证能访问 dongtai-mysql & dongtai-redis
docker run --rm --name dongtai-server-migrate --network ${NETWORK_NAME} \
-v $(pwd)/config-tutorial.ini:/opt/dongtai/dongtai_conf/conf/config.ini \
wukong.tencentcloudcr.com/dongtai/dongtai-server:${{ steps.release.outputs.version }} migrate || (docker logs dongtai-server-migrate || true; echo "migrate failed"; exit 1)
# 导出 schema(将数据导出到 runner 工作目录)
docker exec -i $(docker ps -aqf "name=dongtai-mysql") /bin/bash -c \
"mysqldump dongtai_webapi -u root -p'${MYSQL_ROOT_PASSWORD}' --single-transaction" > dongtai-mysql-schema.sql || (docker logs dongtai-mysql && exit 1)
echo "exported schema to dongtai-mysql-schema.sql"
ls -l dongtai-mysql-schema.sql
- name: Build and Push MySQL image (5.7)
uses: docker/build-push-action@v3
with:
context: ./mysql
push: true
platforms: linux/amd64
tags: |
dongtai/dongtai-mysql:${{ steps.release.outputs.version }}
dongtai/dongtai-mysql:latest
- name: Modify Dockerfile to MySQL 8.0
working-directory: ./mysql
run: |
sed -i 's#5.7#8.0#g' Dockerfile
- name: Build and Push MySQL image (8.0)
uses: docker/build-push-action@v3
with:
context: ./mysql
push: true
platforms: linux/amd64
tags: |
dongtai/dongtai-mysql-8:${{ steps.release.outputs.version }}
dongtai/dongtai-mysql-8:latest
- name: Cleanup containers and network
if: always()
run: |
docker rm -f dongtai-server-migrate || true
docker rm -f dongtai-mysql || true
docker rm -f dongtai-redis || true
docker network rm ${NETWORK_NAME} || true
- name: finish-build webhook
if: always()
uses: joelwmale/webhook-action@master
with:
url: ${{ secrets.WEBHOOK_URL }}
body: >
{"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"}}]}}