# ============================================================= # freedom-admin CI/CD 工作流(后端) # 触发条件:push 到 master 分支时自动构建并部署 # # 环境(已确认): # - runner: local-runner (act_runner v0.6.1),labels: ubuntu-latest # - job 容器挂载 /var/run/docker.sock 与 /opt/freedom(由 runner-config.toml 的 volumes 提供) # - Gitea 内网地址:host.docker.internal:3000(Gitea Actions 实例地址) # - 部署目录:/opt/freedom/deploy(含 docker-compose.yml 与 .env) # # 前置条件(管理员一次性完成): # - 宿主 /opt/freedom/deploy/docker-compose.yml 与 .env 已就位(含 DB 凭据) # ============================================================= name: CI/CD Deploy (Admin) on: push: branches: - master workflow_dispatch: jobs: build-and-deploy: name: 构建后端镜像并部署 runs-on: ubuntu-latest container: image: docker:24.0-cli # 注意:docker.sock 与 /opt/freedom 挂载由 runner-config.toml 提供, # 不要在 options 中重复添加(act_runner v0.6.1 不合并 workflow 的 bind mount) steps: - name: 安装 git run: apk add --no-cache git - name: Debug 网络环境 run: | set -x { echo "=== /etc/hosts ===" cat /etc/hosts echo "=== getent hosts host.docker.internal ===" getent hosts host.docker.internal || echo "NOT_RESOLVED" echo "=== GITHUB_TOKEN len ===" echo "len=${#GITHUB_TOKEN}" echo "=== GITHUB_REPOSITORY ===" echo "${GITHUB_REPOSITORY}" echo "=== ping test ===" wget -q -T 3 -O /dev/null http://host.docker.internal:3000/api/v1/version && echo HTTP_OK || echo HTTP_FAIL } | tee /opt/freedom/workspace-debug.txt - name: 拉取 master 代码 run: | set -euo pipefail rm -rf /opt/freedom/workspace-admin git clone --depth 1 --branch master \ "http://oauth2:${GITHUB_TOKEN}@host.docker.internal:3000/${GITHUB_REPOSITORY}.git" \ /opt/freedom/workspace-admin cd /opt/freedom/workspace-admin echo "==> 已拉取代码,最新提交:" git log -1 --oneline env: GITHUB_TOKEN: ${{ github.token }} - name: 构建后端镜像 run: | set -euo pipefail docker build -t freedom-admin:latest /opt/freedom/workspace-admin - name: 部署后端服务 run: | set -euo pipefail cd /opt/freedom/deploy test -f docker-compose.yml || { echo "错误: 缺少 docker-compose.yml,请先初始化部署目录"; exit 1; } test -f .env || { echo "错误: 缺少 .env,请先初始化部署目录"; exit 1; } docker compose up -d --force-recreate backend - name: 确认部署结果 run: | cd /opt/freedom/deploy docker compose ps backend