fix(ci): 修正 gradle 调用与素材地址,失败信息直指根因
Build APK / build (push) Failing after 38s

Probe(run 343)实测结论:
- job 跑在 Docker 容器内,容器里没有 java,也没有 /opt/jdk17、/opt/android-sdk、/opt/gradle
- 127.0.0.1 不可达(容器内 127 指向自身);172.17.0.1(Docker 网关)17.6 MB/s;公网 370 KB/s

改动:
- 素材地址顺序改为 172.17.0.1 → 127.0.0.1 → server_url(按容器/host 两种模式的实际可达性排)
- 构建改用探测到的系统 gradle:本项目没有 gradlew(build.sh 用的是 /opt/gradle/gradle-8.5)
- 找不到 SDK 时的报错补上「容器看不到宿主机 /opt」这一层,并给出改 host 模式的具体命令
This commit is contained in:
jkooe committed 2026-11-09 18:36:41 +08:00
1 parent 33393e97fd
commit 3dcda9fde4
1 file changed
+33 -8
+33 -8
View File
@@ -33,11 +33,14 @@ jobs:
- name: 叠加完整素材(full-assets 分支)
run: |
set -e
# 地址选择:runner 通常与 Gitea 同机,走 127.0.0.1 比走配置里的公网地址快一个量级
# (实测公网约 72KB/s,650MB 素材要 2.5 小时;同机回环是即时 IO)。
# 地址选择(实测数据,见 Probe 探测):
# 172.17.0.1:3000(Docker 网关 → 宿主机) 17.6 MB/s ← 容器模式下的正确地址
# 127.0.0.1:3000 不可达(容器内 127 是容器自己)
# 123.206.124.151:3000 370 KB/s(走公网绕行,慢 47 倍)
# 顺序按"容器模式优先、host 模式兜底"排:先试网关,再试回环,最后才回公网。
GH_REPO="${{ github.repository }}"
GIT_URL=""
for cand in "http://127.0.0.1:3000" "http://172.17.0.1:3000" "${{ github.server_url }}"; do
for cand in "http://172.17.0.1:3000" "http://127.0.0.1:3000" "${{ github.server_url }}"; do
if timeout 8 curl -sf -o /dev/null "$cand/api/v1/version" 2>/dev/null; then
GIT_URL="$cand/$GH_REPO.git"
echo "选用 Gitea 地址:$cand"
@@ -99,9 +102,17 @@ jobs:
done
fi
if [ -z "${ANDROID_HOME:-}" ] || [ ! -d "$ANDROID_HOME" ]; then
echo "::error::runner 上找不到 Android SDK(ANDROID_HOME 未设置且常见路径均不存在)"
echo " 请在 runner 机器安装 Android commandline-tools + platform-34 + build-tools-35.0.0,"
echo " 或设置 ANDROID_HOME 环境变量后重试。"
echo "::error::找不到 Android SDK(ANDROID_HOME 未设置且常见路径均不存在)"
echo " 环境线索:java = $(java -version 2>&1 | head -1 || echo '未安装')"
if [ -f /.dockerenv ]; then
echo " ⚠ 本 job 运行在 Docker 容器内 —— 容器**看不到**宿主机的 /opt/jdk17、/opt/android-sdk。"
echo " (Probe 实测:容器内 java 不存在、/opt/* 全空、127.0.0.1 不可达、172.17.0.1 达 17.6MB/s)"
fi
echo " 两条出路:"
echo " 1)(推荐,最快)把 runner 改成 host 模式,直接复用宿主机现成环境:"
echo " sed -i 's|\"ubuntu-latest:docker://[^\"]*\"|\"ubuntu-latest:host\"|' /data/.runner"
echo " 然后重启 runner 容器。host 模式下 /opt/jdk17 与 /opt/android-sdk 直接可用。"
echo " 2) 给 runner 换一个自带 JDK17 + Android SDK 的镜像(约 +3GB)。"
exit 1
fi
echo "ANDROID_HOME=$ANDROID_HOME" >> "$GITHUB_ENV"
@@ -141,8 +152,22 @@ jobs:
ARGS=""
[ "$VARIANT" = "hq" ] && ARGS="-Phq"
chmod +x gradlew
./gradlew :app:assembleRelease $ARGS --no-daemon --stacktrace
# 本项目**不带 gradlew**(build.sh 走的是系统 gradle),所以按优先级探测可执行文件
GRADLE_BIN=""
for c in /opt/gradle/gradle-8.5/bin/gradle /opt/gradle/bin/gradle ./gradlew; do
[ -x "$c" ] && GRADLE_BIN="$c" && break
done
if [ -z "$GRADLE_BIN" ]; then
GRADLE_BIN=$(command -v gradle 2>/dev/null || true)
fi
[ -n "$GRADLE_BIN" ] || {
echo "::error::找不到 gradle —— 项目无 gradlew,必须用系统 gradle"
echo " 期望路径:/opt/gradle/gradle-8.5/bin/gradle(build.sh 里用的就是它)"
exit 1
}
echo "gradle: $GRADLE_BIN"
"$GRADLE_BIN" :app:assembleRelease $ARGS --no-daemon --stacktrace
APK=app/build/outputs/apk/release/app-release.apk
[ -f "$APK" ] || { echo "::error::构建产物不存在:$APK"; exit 1; }