From af9df0104692dc309225bf66241dacf0939439ef Mon Sep 17 00:00:00 2001 From: SpecialX <47072643+wangxiner55@users.noreply.github.com> Date: Wed, 25 Feb 2026 17:49:11 +0800 Subject: [PATCH] fix-ci-dynamic-ip --- .gitea/workflows/ci.yml | 68 ++++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 6dca14c..94cb1e5 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -14,23 +14,38 @@ jobs: runs-on: CDCD container: image: dockerreg.eazygame.cn/node:22-bookworm - # 使用 host 网络模式,让容器共享宿主机的网络栈 - # 这样容器就能解析宿主机的 hosts,也能访问 localhost:3000 (Gitea) 和 localhost:7890 (Clash) - # 同时强制将 Gitea 域名解析到 localhost (宿主机),确保能连上 - options: --network host --add-host gittea.eazygame.cn:127.0.0.1 + # 不再硬编码 options,改用动态脚本配置 env: SKIP_ENV_VALIDATION: "1" NEXT_TELEMETRY_DISABLED: "1" - # 使用 host 模式后,容器内的 localhost 就是宿主机本身 - http_proxy: "http://127.0.0.1:7890" - https_proxy: "http://127.0.0.1:7890" - HTTP_PROXY: "http://127.0.0.1:7890" - HTTPS_PROXY: "http://127.0.0.1:7890" - - # 【关键修正】添加 NO_PROXY,让内网 IP 不走代理 - NO_PROXY: "localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,gittea.eazygame.cn,.eazygame.cn" - no_proxy: "localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,gittea.eazygame.cn,.eazygame.cn" + # 代理设置将在步骤中动态生成,这里先留空或仅保留默认值 + # http_proxy: ... (removed) steps: + - name: 🌐 Setup Network & Proxy (Dynamic) + run: | + # 1. 动态获取 Docker 网关 IP (即宿主机 IP) + GATEWAY_IP=$(ip route show | grep default | awk '{print $3}') + echo "Detected Docker Gateway IP: $GATEWAY_IP" + + # 2. 配置 Host 解析 (解决 gittea.eazygame.cn 无法访问的问题) + # 注意:需要容器内有 root 权限 (node 镜像默认是 root) + echo "$GATEWAY_IP gittea.eazygame.cn" >> /etc/hosts + cat /etc/hosts + + # 3. 动态设置代理环境变量 + PROXY_URL="http://$GATEWAY_IP:7890" + echo "Setting Proxy to: $PROXY_URL" + + echo "http_proxy=$PROXY_URL" >> $GITHUB_ENV + echo "https_proxy=$PROXY_URL" >> $GITHUB_ENV + echo "HTTP_PROXY=$PROXY_URL" >> $GITHUB_ENV + echo "HTTPS_PROXY=$PROXY_URL" >> $GITHUB_ENV + + # 4. 设置 NO_PROXY (内网不走代理) + # 包含 localhost, 127.0.0.1, 网关IP, 以及 Gitea 域名 + NO_PROXY_VAL="localhost,127.0.0.1,$GATEWAY_IP,gittea.eazygame.cn,.eazygame.cn,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12" + echo "NO_PROXY=$NO_PROXY_VAL" >> $GITHUB_ENV + echo "no_proxy=$NO_PROXY_VAL" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 @@ -55,11 +70,11 @@ jobs: - name: Debug Network run: | - echo "Testing connection to proxy..." - curl -v http://127.0.0.1:7890 || echo "Failed to connect to 127.0.0.1:7890" + echo "Testing connection to 172.28.0.1 proxy..." + curl -v --connect-timeout 2 http://172.28.0.1:7890 || echo "Failed to connect to 172.28.0.1:7890" - echo "Testing google via proxy..." - curl -I -x http://127.0.0.1:7890 https://www.google.com || echo "Failed to curl google" + echo "Testing google via proxy (172.28.0.1)..." + curl -I -x http://172.28.0.1:7890 https://www.google.com || echo "Failed to curl google via 172.28.0.1" echo "Current IP info:" ip addr || true @@ -150,6 +165,25 @@ jobs: container: image: dockerreg.eazygame.cn/node-with-docker:22 steps: + - name: 🌐 Setup Network (Dynamic) for Deploy + run: | + # 1. 动态获取 Docker 网关 IP (即宿主机 IP) + # 注意:如果在宿主机直接运行 (没有 container),这个逻辑可能不需要,或者 IP 就是 127.0.0.1 + # 但为了保险起见,我们还是探测一下 + GATEWAY_IP=$(ip route show | grep default | awk '{print $3}') || echo "127.0.0.1" + echo "Detected Gateway IP: $GATEWAY_IP" + + # 2. 配置 Host 解析 (如果是在容器内运行) + if [ -f /etc/hosts ] && [ "$(id -u)" -eq 0 ]; then + echo "$GATEWAY_IP gittea.eazygame.cn" >> /etc/hosts || true + cat /etc/hosts + fi + + # 3. 设置 NO_PROXY 环境变量供后续步骤使用 + NO_PROXY_VAL="localhost,127.0.0.1,$GATEWAY_IP,gittea.eazygame.cn,.eazygame.cn,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12" + echo "NO_PROXY=$NO_PROXY_VAL" >> $GITHUB_ENV + echo "no_proxy=$NO_PROXY_VAL" >> $GITHUB_ENV + - name: Download artifacts uses: actions/download-artifact@v3 with: