# ============================================================= # freedom-admin CI/CD 工作流(后端) # 触发条件:push 到 master 分支时自动构建并部署 # # 环境(已实测确认,act_runner v0.6.1): # - runner: local-runner,labels: ubuntu-latest # - /var/run/docker.sock 由 act_runner 自动挂载,切勿重复声明 # (重复会报 Duplicate mount point: /var/run/docker.sock) # - /opt/freedom 必须经 container.options 的 -v 挂载,且在 # runner-config.yml 的 container.valid_volumes 白名单内,否则会被静默剥离 # - host.docker.internal 由 container.options 的 --add-host 解析到宿主 # - act_runner 不会自动检出代码到 /workspace(实测为空目录),需自行拉取 # - 部署目录:/opt/freedom/deploy(含 docker-compose.yml 与 .env) # ============================================================= 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 options: -v /opt/freedom:/opt/freedom --add-host=host.docker.internal:host-gateway 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