From 064932f04a6d90f2f2d240630fd19835e22e3f59 Mon Sep 17 00:00:00 2001 From: yiciheng Date: Wed, 26 Aug 2026 14:14:56 +0800 Subject: [PATCH] cicd: use workflow container volumes/options + runner valid_volumes --- .gitea/workflows/deploy.yml | 161 ++++++++++++++++++------------------ 1 file changed, 82 insertions(+), 79 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index e540173..33e6058 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,79 +1,82 @@ -# ============================================================= -# 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 +# ============================================================= +# 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 + # 挂载与 host 解析:runner-config 的 valid_volumes 白名单 + workflow 级 volumes/options + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /opt/freedom:/opt/freedom + options: --add-host=host.docker.internal:host-gateway + 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