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:
1 parent
33393e97fd
commit
3dcda9fde4
1 file changed
+33
-8
@@ -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; }
|
||||
|
||||
Reference in new issue
Block a user