# ============================================================= # freedom-admin CI/CD 工作流(后端) # 触发条件:push 到 master 分支时自动构建并部署 # # 环境(已确认): # - runner: local-runner (act_runner v0.6.1),labels: ubuntu-latest # - job 容器自动挂载 /var/run/docker.sock(runner-config.toml 配置) # - job 容器可通过 host.docker.internal 访问宿主机(runner 已配 host-gateway) # - Gitea 内网地址:host.docker.internal:3000 # - 部署目录:/opt/freedom/deploy(初始化时创建,含 docker-compose.yml 与 .env) # # 前置条件(管理员一次性完成): # - 宿主 /opt/freedom/deploy/docker-compose.yml 已就位 # - 宿主 /opt/freedom/deploy/.env 含 DB_URL / DB_USERNAME / DB_PASSWORD # ============================================================= 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 # 部署目录挂载(构建 context 与 compose 均在宿主可见) # docker.sock 已由 runner 自动挂载,此处无需重复 options: -v /opt/freedom:/opt/freedom steps: - name: 安装 git run: apk add --no-cache git - 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