feat(gitea-actions): pull+push missed base images into {registry}/images before FROM rewrite — new base images persist to internal namespace on first build instead of passive fallback; bare invocation is read-only CI/CD compliance audit; brace variable refs before full-width chars (bash 3.2 UTF-8 expansion bug); check-workflow.sh item ⑩ now requires sync-on-miss logic
This commit is contained in:
1 parent
4e34ed0c0c
commit
5c9886ac24
3 files changed
+57
-35
No files matched your search
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: gitea-actions
|
||||
description: 按统一规范给项目生成或评审优化 Gitea Actions 构建部署工作流(.gitea/workflows/docker-deploy.yaml):推 v 开头 tag 触发 → buildx 构建推 Gitea Packages → 本机 docker 重建容器 → 清理本机与注册表旧版本;零第三方 action、INNEV_ 前缀变量/密钥、凭证回退链、基础镜像强制网络检测选址(内网 livebook:8418 / 外网 code.innev.cn)并优先 {registry}/images 内网源。凡用户要求「给项目加构建工作流 / 加个 CI / 配发版流水线 / 加 Gitea Actions / 生成 docker-deploy.yaml / 打 tag 自动构建部署 / 这个项目怎么自动发版 / 看看这个 workflow 规范不规范 / 帮我评审一下这个流水线」,或出现 推了 tag Actions 没动静 / workflow 不触发 / push 镜像 denied / unauthorized / 健康检查超时 / 拉基础镜像超时 等症状,或提到 .gitea/workflows / workflow_dispatch / buildx / Gitea Packages / self-hosted runner / INNEV_ 变量 时,务必使用本 skill——即使用户没说「Gitea Actions」这几个字。Use whenever the user wants to add, review, or standardize a Gitea Actions build/deploy workflow for a project. 边界:写/改 Dockerfile 用 runtime-image;提交推送代码+写日报用 push-and-report;手工推镜像发版用 xgent-image-push。
|
||||
description: 按统一规范给项目生成或评审优化 Gitea Actions 构建部署工作流(.gitea/workflows/docker-deploy.yaml):推 v 开头 tag 触发 → buildx 构建推 Gitea Packages → 本机 docker 重建容器 → 清理本机与注册表旧版本;零第三方 action、INNEV_ 前缀变量/密钥、凭证回退链、基础镜像强制网络检测选址(内网 livebook:8418 / 外网 code.innev.cn),FROM 未命中 {registry}/images 时自动拉官方源推送落盘后再改写。不带任何输入调用本 skill = 审查当前项目 CI/CD 是否符合本规范。凡用户要求「给项目加构建工作流 / 加个 CI / 配发版流水线 / 加 Gitea Actions / 生成 docker-deploy.yaml / 打 tag 自动构建部署 / 这个项目怎么自动发版 / 看看这个 workflow 规范不规范 / 帮我评审一下这个流水线」,或出现 推了 tag Actions 没动静 / workflow 不触发 / push 镜像 denied / unauthorized / 健康检查超时 / 拉基础镜像超时 等症状,或提到 .gitea/workflows / workflow_dispatch / buildx / Gitea Packages / self-hosted runner / INNEV_ 变量 时,务必使用本 skill——即使用户没说「Gitea Actions」这几个字。Use whenever the user wants to add, review, or standardize a Gitea Actions build/deploy workflow for a project. 边界:写/改 Dockerfile 用 runtime-image;提交推送代码+写日报用 push-and-report;手工推镜像发版用 xgent-image-push。
|
||||
---
|
||||
|
||||
# gitea-actions — 按统一规范给项目装构建部署工作流
|
||||
@@ -10,11 +10,13 @@ description: 按统一规范给项目生成或评审优化 Gitea Actions 构建
|
||||
- **版本号即镜像 tag**:发布 = 打 v 开头 git tag,镜像 tag 与之一一对应,可回溯;推 main 不发版
|
||||
- **runner 与部署目标同机**:self-hosted 实例级 runner 直连宿主 docker,构建完即本机部署
|
||||
- **零外部依赖**:不用任何第三方 action,run 步骤直连 git/docker,内网 runner 无需访问 github.com
|
||||
- **基础镜像内网优选**:FROM 优先 `{registry}/images`(组织已把常用基础镜像同步到该命名空间),未命中回退官方源;拉取前强制网络检测选址——内网 `livebook:8418`、外网 `code.innev.cn`,写死任一地址换网络环境必挂;改写只落在 CI 克隆副本,仓库 Dockerfile 保持任意网络可构建
|
||||
- **基础镜像内网落盘**:FROM 命中 `{registry}/images` 直接改写为内部引用;未命中则由流水线把官方源镜像拉下来、推送进 images 命名空间后再改写——新基础镜像一次构建即落盘,后续构建全部内网命中、越构建越快。拉取/推送失败回退官方源不硬失败;拉取前强制网络检测选址——内网 `livebook:8418`、外网 `code.innev.cn`,写死任一地址换网络环境必挂;改写只落在 CI 克隆副本,仓库 Dockerfile 保持任意网络可构建
|
||||
|
||||
## 默认流程(不带任何附加提示词也照此执行)
|
||||
|
||||
检测项目是否存在 `.gitea/workflows/` 下的工作流文件(yml/yaml),自动分流:
|
||||
**用户不带任何附加输入调用本 skill = 审查当前项目 CI/CD 是否符合本规范**:走评审优化模式的只读审计——已有 workflow 逐条对照审计清单;连 `.gitea/workflows/` 都没有则如实报告"未配置 CI/CD"并给出新建建议,不默认动手生成。
|
||||
|
||||
带明确意图输入(如"加个 CI""生成 workflow")时,检测项目是否存在 `.gitea/workflows/` 下的工作流文件(yml/yaml),自动分流:
|
||||
|
||||
- **不存在 → 新建模式**:按规范从零生成 `docker-deploy.yaml`
|
||||
- **已存在 → 评审优化模式**:对照规范逐条审计,差异摊开,用户确认后按规范改写优化(默认不直接覆盖)
|
||||
@@ -85,7 +87,7 @@ description: 按统一规范给项目生成或评审优化 Gitea Actions 构建
|
||||
| B8 | 明文密钥 / clone 日志未 `grep -v` 过滤 token / docker login 未走 `--password-stdin` | ⑦ | 必须修(安全项,优先处理) |
|
||||
| B9 | 健康检查缺失或窗口与启动模型不匹配(runtime-node 首启数分钟) | ⑧ | 建议修 |
|
||||
| B10 | 自定义变量/密钥未用 INNEV_ 前缀 | 命名约定 | 建议修 |
|
||||
| B11 | 缺基础镜像内网优选(无强制网络检测选址步 / FROM 未优先 {registry}/images) | ⑩ | 必须修 |
|
||||
| B11 | 缺基础镜像同步落盘(无强制网络检测选址步 / FROM 未命中 {registry}/images 时未先拉取推送落盘再改写、仅被动回退官方源) | ⑩ | 必须修 |
|
||||
|
||||
级别定义:**必须修** = 会挂/泄密/误删邻项目产物;**建议修** = 能跑但稳定性/可维护性受损。
|
||||
|
||||
@@ -129,7 +131,7 @@ description: 按统一规范给项目生成或评审优化 Gitea Actions 构建
|
||||
- ⑦ **密钥全部走 secrets 引用,clone 日志 `grep -v "$GIT_TOKEN"` 过滤,docker login 走 `--password-stdin`**。为什么:明文 token 进 workflow 文件 = 进 git 历史;密码进 argv 会留在日志与进程列表。
|
||||
- ⑧ **健康检查窗口按启动模型放宽**。为什么:runtime-node 系容器首启要 install+build 数分钟,窗口太短会把正常启动当失败杀掉(spms 实测放宽到 ~7.5 分钟);项目没有健康端点时不虚构——省略该步并显式声明。
|
||||
- ⑨ **生成/改写前先摊全文或 diff 给用户确认**。为什么:workflow 直接决定发布行为,未经确认的写入超出授权;默认动作永远是"不写"。
|
||||
- ⑩ **基础镜像强制优选内部源 `{registry}/images`,拉取前强制网络检测选址(内网 `livebook:8418` / 外网 `code.innev.cn`),未命中回退官方源不硬失败;FROM 改写只作用 CI 克隆副本**。为什么:内网 runner 直连 docker.io 慢/超时,images 命名空间已同步常用基础镜像,优先内网源又快又稳;livebook:8418 是 LAN 明文、code.innev.cn 是 WAN TLS,写死任一地址换网络环境必挂——必须运行时探测;仓库 Dockerfile 要在任意网络可构建,不能把内网地址烙进源码。
|
||||
- ⑩ **基础镜像强制落盘内部源 `{registry}/images`:命中直接改写 FROM;未命中先 `docker pull` 官方源 → `docker push` 到 `{registry}/images` 落盘 → 再改写 FROM;仅拉取/推送失败才回退官方源(告警不硬失败)。拉取前强制网络检测选址(内网 `livebook:8418` / 外网 `code.innev.cn`);改写只作用 CI 克隆副本**。为什么:内网 runner 直连 docker.io 慢/超时——新基础镜像首次构建即同步落盘,后续构建全部命中内网源、越构建越快,不再依赖组织提前手工同步;livebook:8418 是 LAN 明文、code.innev.cn 是 WAN TLS,写死任一地址换网络环境必挂——必须运行时探测;同步失败只告警回退,不让镜像源问题阻塞发版;仓库 Dockerfile 要在任意网络可构建,不能把内网地址烙进源码。
|
||||
|
||||
## 凭证与配置
|
||||
|
||||
@@ -148,8 +150,8 @@ description: 按统一规范给项目生成或评审优化 Gitea Actions 构建
|
||||
| 推 tag 后 Actions 没动静 | 仓库未启用 Actions Units / tag 不是 v 开头 | 仓库设置启用 Actions;tag 改 v 开头重打 |
|
||||
| 镜像 push 阶段失败(http 相关报错) | buildkitd.toml 未声明 `http=true`(buildkitd 不继承宿主 insecure-registries) | 按约束③补齐注入(本规范模板已含) |
|
||||
| 构建拉基础镜像超时 | docker-container 驱动不继承宿主 registry-mirrors | 经 buildkitd.toml 注入 INNEV_DOCKERHUB_MIRRORS |
|
||||
| 优选步骤全部显示「内部源未命中」 | images 命名空间未同步该基础镜像 | 在 Gitea images 组织确认/同步对应镜像;流水线自动回退官方源,不阻塞 |
|
||||
| 优选/构建拉 livebook:8418 报 http 相关错误 | buildkitd.toml 缺该 registry 的 http=true 声明 | 模板已含条件注入;旧 workflow 按约束③⑩补齐 |
|
||||
| 同步步反复出现「同步失败」告警 | 宿主 pull 官方源超时(mirrors 未配)/ push 到 images 被拒(token 缺 write:package 或对 images 组织无写权限 / 宿主 daemon.json 未登记 livebook:8418 insecure-registries) | 配宿主 registry-mirrors;确认 INNEV_REGISTRY_TOKEN scope 与 images 组织写权限、daemon.json 登记并重启 docker——同步失败只告警回退官方源,不阻塞构建 |
|
||||
| 同步/构建拉 livebook:8418 报 http 相关错误 | buildkitd.toml 缺该 registry 的 http=true 声明 | 模板已含条件注入;旧 workflow 按约束③⑩补齐 |
|
||||
| 外网 runner 检测命中 code.innev.cn 但拉取失败 | token 失效或 runner 无外网 | 确认 INNEV_REGISTRY_TOKEN 有效(同一 Gitea 实例内外网凭证通用)、runner 可出外网 |
|
||||
| 部署机 `docker pull` 报 `HTTP response to HTTPS client` | 宿主 daemon.json 未登记 LAN 明文 registry | 登记 insecure-registries 并重启 docker(人工),或前缀改 TLS 地址 |
|
||||
| 健康检查超时/失败 | runtime-node 首启 install+build 数分钟窗口太短;或 .env 缺 key | 按约束⑧放宽窗口;看容器日志确认缺哪个 key |
|
||||
@@ -174,4 +176,4 @@ die 消息统一三段式:是什么 + 为什么(后果) + 怎么办。
|
||||
- 提交推送代码并写日报(归 push-and-report)
|
||||
- 手工构建推送业务镜像发版(归 xgent-image-push / xgent-app-release)
|
||||
- 修改 runtime 基础镜像本身(归 runtime-base 仓库维护)
|
||||
- 基础镜像同步进 `{registry}/images` 命名空间(组织级镜像维护动作;本 skill 只管流水线侧的优选与回退)
|
||||
- `{registry}/images` 命名空间的组织级批量同步与清理(本 skill 让流水线在构建时对未命中的 FROM 按需同步落盘,日常构建即自然积累;批量预同步/下架清理不归本 skill)
|
||||
@@ -18,8 +18,9 @@
|
||||
# 命名约定:自定义变量/密钥一律 INNEV_ 前缀(仓库 → 设置 → Actions 配置,清单见本文件尾部注释)。
|
||||
# 凭证回退链:INNEV_REGISTRY_USER / INNEV_REGISTRY_TOKEN → gitea.actor / 内置 GITHUB_TOKEN;
|
||||
# INNEV_CI_TOKEN → GITHUB_TOKEN。加了即生效。
|
||||
# 基础镜像:拉取前强制网络检测选址(内网 livebook:8418 / 外网 code.innev.cn),FROM 优先
|
||||
# <registry>/images 命名空间,未命中回退官方源;改写只作用 CI 克隆副本,不动仓库 Dockerfile。
|
||||
# 基础镜像:拉取前强制网络检测选址(内网 livebook:8418 / 外网 code.innev.cn);FROM 命中
|
||||
# <registry>/images 直接改写,未命中先拉官方源推送落盘到该命名空间再改写(同步失败回退官方源);
|
||||
# 改写只作用 CI 克隆副本,不动仓库 Dockerfile。
|
||||
# 镜像 tag = 版本号(git tag,如 v1.2.3)+ latest;手动 dispatch 无 tag 上下文时回退提交短 sha。
|
||||
name: docker-deploy
|
||||
|
||||
@@ -49,7 +50,8 @@ env:
|
||||
# 服务器上单独维护的 .env 绝对路径(key 与仓库 .env.example 一致);.env 不进 git/镜像
|
||||
INNEV_ENV_FILE: ${{ vars.INNEV_ENV_FILE || '/etc/{{PROJECT}}/.env' }}
|
||||
# 基础镜像内网源 registry——默认空 = 强制网络检测自动选址(内网 livebook:8418 / 外网
|
||||
# code.innev.cn);显式设置覆盖探测结果。FROM 命中 <该值>/images 即改写为内部引用,缺失回退官方源
|
||||
# code.innev.cn);显式设置覆盖探测结果。FROM 命中 <该值>/images 即改写为内部引用;
|
||||
# 未命中先拉官方源推送落盘到该命名空间再改写,同步失败回退官方源
|
||||
INNEV_IMAGES_REGISTRY: ${{ vars.INNEV_IMAGES_REGISTRY || '' }}
|
||||
|
||||
jobs:
|
||||
@@ -73,7 +75,7 @@ jobs:
|
||||
|
||||
# 从 <registry>/images 拉基础镜像之前必须强制网络检测选址:livebook:8418 是 LAN 明文 HTTP、
|
||||
# code.innev.cn 是 WAN TLS——写死任一地址,换个网络环境流水线必挂。均不可达则置空,
|
||||
# 后续优选步整体回退官方源(buildkitd.toml 的 docker.io mirrors 兜底)。
|
||||
# 后续同步/改写步整体跳过,基础镜像全走官方源(buildkitd.toml 的 docker.io mirrors 兜底)。
|
||||
- name: 强制网络检测(基础镜像源选址)
|
||||
run: |
|
||||
REG="${INNEV_IMAGES_REGISTRY#*://}"
|
||||
@@ -130,13 +132,18 @@ jobs:
|
||||
cat buildkitd.toml
|
||||
docker buildx create --use --name {{PROJECT}}builder --config buildkitd.toml
|
||||
|
||||
# 基础镜像强制优选内部源:src 副本 Dockerfile 里命中 <registry>/images 的 FROM 改写为内部引用,
|
||||
# 未命中保持原样(构建时经 buildkitd.toml 的 docker.io mirrors 回退官方源),不硬失败。
|
||||
# 基础镜像强制落盘内部源:src 副本 Dockerfile 里每个官方源 FROM——
|
||||
# ① <registry>/images 已存在 → 直接改写为内部引用;
|
||||
# ② 未命中 → docker pull 官方源(宿主 daemon registry-mirrors 加速)→ tag 后 push 到
|
||||
# <registry>/images 落盘 → 再改写引用——新镜像一次构建即入内部源,后续构建全部内网命中;
|
||||
# ③ 拉取/推送失败 → 保留官方源引用并告警(buildkitd.toml 的 docker.io mirrors 兜底),不硬失败。
|
||||
# push 走部署机宿主 docker:LAN 明文 registry 需宿主 daemon.json 已登记 insecure-registries
|
||||
# (一次性人工准备第 2 条),token 需 write:package 且对 images 组织有写权限。
|
||||
# 只改 CI 克隆出的副本,不动仓库 Dockerfile——同一 Dockerfile 在任意网络环境都要可构建。
|
||||
- name: 基础镜像优选内部源(images 命名空间,缺失回退官方源)
|
||||
- name: 基础镜像同步入 images 并改写 FROM(未命中先拉取推送落盘)
|
||||
run: |
|
||||
if [ -z "$INNEV_IMAGES_REGISTRY" ]; then
|
||||
echo "内部镜像源不可用,跳过优选,基础镜像全部走官方源"
|
||||
echo "::warning::内部镜像源不可用,基础镜像全部走官方源(未执行同步落盘)"
|
||||
exit 0
|
||||
fi
|
||||
cd src
|
||||
@@ -145,22 +152,31 @@ jobs:
|
||||
{ grep -niE '^[[:space:]]*FROM[[:space:]]' Dockerfile || true; } | cut -d: -f1 | while read -r N; do
|
||||
REF=$(awk -v n="$N" 'NR==n{for(i=2;i<=NF;i++){if($i ~ /^--/) continue; print $i; exit}}' Dockerfile)
|
||||
case "$REF" in ''|scratch|'$'*|*@*) echo "跳过 ${REF:-空引用}(scratch/ARG/digest)"; continue ;; esac
|
||||
W="${REF#docker.io/}" # 显式 docker.io 前缀视同官方源,纳入优选
|
||||
W="${REF#docker.io/}" # 显式 docker.io 前缀视同官方源,纳入同步
|
||||
# 仅当含 / 时才可能带 registry:首段含 . 或 : 或是 localhost 即视为已带 registry,保持原样
|
||||
case "$W" in */*) case "${W%%/*}" in *.*|*:*|localhost) echo "跳过 $REF(已带 registry)"; continue ;; esac ;; esac
|
||||
if echo "$STAGES" | grep -qx "$W"; then echo "跳过 $REF(构建阶段名)"; continue; fi
|
||||
case "$W" in */*) case "${W%%/*}" in *.*|*:*|localhost) echo "跳过 ${REF}(已带 registry)"; continue ;; esac ;; esac
|
||||
if echo "$STAGES" | grep -qx "$W"; then echo "跳过 ${REF}(构建阶段名)"; continue; fi
|
||||
NAME="${W%%:*}"; if [ "$NAME" = "$W" ]; then TAG=latest; else TAG="${W##*:}"; fi
|
||||
NAME="${NAME#library/}"
|
||||
CAND="$INNEV_IMAGES_REGISTRY/images/$NAME:$TAG"
|
||||
if docker buildx imagetools inspect "$CAND" >/dev/null 2>&1; then
|
||||
echo "内部源已存在:$CAND"
|
||||
else
|
||||
echo "内部源未命中,同步落盘:$REF → $CAND"
|
||||
if docker pull "$REF" && docker tag "$REF" "$CAND" && docker push "$CAND"; then
|
||||
# 宿主本地留两份基础镜像副本纯属占盘(buildx docker-container 不用宿主镜像存储),推完即删
|
||||
docker rmi "$REF" "$CAND" >/dev/null 2>&1 || true
|
||||
echo "同步完成:$CAND"
|
||||
else
|
||||
echo "::warning::同步 $REF 失败(pull/push 未成功),保留官方源引用"
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
ESC=$(printf '%s' "$REF" | sed 's/[.[\*^$/]/\\&/g')
|
||||
sed -i "${N}s|$ESC|$CAND|" Dockerfile
|
||||
echo "优选命中:$REF → $CAND"
|
||||
else
|
||||
echo "内部源未命中,保留官方源:$REF"
|
||||
fi
|
||||
echo "FROM 改写:$REF → $CAND"
|
||||
done
|
||||
echo '--- 优选后的 FROM 行 ---'
|
||||
echo '--- 改写后的 FROM 行 ---'
|
||||
grep -niE '^[[:space:]]*FROM[[:space:]]' Dockerfile || true
|
||||
|
||||
# [OPTIONAL:PRE_BUILD] 项目有特殊预构建步骤(如从源码构建工具二进制)时取消注释并改写本步,
|
||||
@@ -216,7 +232,7 @@ jobs:
|
||||
- name: 重建 {{PROJECT}} 容器
|
||||
run: |
|
||||
IMAGE="$INNEV_IMAGE_PREFIX/{{PROJECT}}:$IMAGE_TAG"
|
||||
[ -f "$INNEV_ENV_FILE" ] || { echo "::error::服务器上未找到 $INNEV_ENV_FILE——请按 .env.example 的 key 创建,或用仓库变量 INNEV_ENV_FILE 指向实际路径"; exit 1; }
|
||||
[ -f "$INNEV_ENV_FILE" ] || { echo "::error::服务器上未找到 ${INNEV_ENV_FILE}——请按 .env.example 的 key 创建,或用仓库变量 INNEV_ENV_FILE 指向实际路径"; exit 1; }
|
||||
# [OPTIONAL:ENV_KEY_CHECKS] 项目有硬性必需的 .env key 时保留本块(按 .env.example 渲染,
|
||||
# 每个 key 一行 grep 检查),否则连同标记整块删除。示例:
|
||||
# grep -q '^DATABASE_URL=.' "$INNEV_ENV_FILE" || { echo "::error::$INNEV_ENV_FILE 缺少 DATABASE_URL"; exit 1; }
|
||||
@@ -248,7 +264,7 @@ jobs:
|
||||
for i in $(seq 1 90); do
|
||||
if curl -fsS "http://127.0.0.1:${INNEV_HOST_PORT}{{HEALTH_PATH}}"; then
|
||||
echo ""
|
||||
echo "部署完成:http://127.0.0.1:${INNEV_HOST_PORT}(镜像 $INNEV_IMAGE_PREFIX/{{PROJECT}}:$IMAGE_TAG)"
|
||||
echo "部署完成:http://127.0.0.1:${INNEV_HOST_PORT}(镜像 $INNEV_IMAGE_PREFIX/{{PROJECT}}:${IMAGE_TAG})"
|
||||
exit 0
|
||||
fi
|
||||
sleep 5
|
||||
@@ -335,10 +351,12 @@ jobs:
|
||||
# host-gateway 访问不通——实测踩坑,切勿写错。
|
||||
# 7. 日常发布:git tag v1.2.3 && git push origin v1.2.3(tag 需 v 开头才会触发流水线);
|
||||
# 部署成功后 cleanup 自动删除本机与 Gitea Packages 里的旧版本镜像,无需人工干预。
|
||||
# 8. 基础镜像内网源:组织已在 Gitea images 命名空间同步常用基础镜像(如 images/golang:1.25-alpine)。
|
||||
# 构建前强制网络检测选址(内网 livebook:8418 / 外网 code.innev.cn),命中即把 src 副本
|
||||
# Dockerfile 的 FROM 改写为 <registry>/images/*,未命中自动回退官方源——全自动无需人工干预,
|
||||
# 只需保证 images 命名空间持续同步需要的基镜像。
|
||||
# 8. 基础镜像内网落盘:构建前强制网络检测选址(内网 livebook:8418 / 外网 code.innev.cn)。
|
||||
# src 副本 Dockerfile 的官方源 FROM 命中 <registry>/images 即直接改写;未命中时流水线
|
||||
# 自动 docker pull 官方源、push 到 <registry>/images 落盘后再改写——新基础镜像一次构建
|
||||
# 即入内部源,后续构建全部内网命中,无需组织提前手工同步。同步失败仅告警并回退官方源,
|
||||
# 不阻塞构建。push 走部署机宿主 docker:livebook:8418 需已登记 daemon.json
|
||||
# insecure-registries(见第 2 条),token 需 write:package 且对 images 组织有写权限。
|
||||
#
|
||||
# 仓库 → 设置 → Actions 配置清单
|
||||
# 变量(Variables):
|
||||
@@ -351,7 +369,8 @@ jobs:
|
||||
# INNEV_ENV_FILE 服务器上 .env 的绝对路径,默认 /etc/{{PROJECT}}/.env(见上方准备 6)
|
||||
# INNEV_IMAGES_REGISTRY 基础镜像内网源 registry——默认空 = 强制网络检测自动选址
|
||||
# (内网 livebook:8418 / 外网 code.innev.cn);显式设置覆盖探测结果。
|
||||
# FROM 命中 <该值>/images 即改写为内部引用,缺失回退官方源
|
||||
# FROM 命中 <该值>/images 即改写;未命中先拉官方源推送落盘到
|
||||
# 该命名空间再改写,同步失败回退官方源
|
||||
# 密钥(Secrets):
|
||||
# INNEV_REGISTRY_USER docker login 账号——跨命名空间推包时必需(同命名空间可回退 gitea.actor)
|
||||
# INNEV_REGISTRY_TOKEN docker login token(scope: write:package + read:package);
|
||||
|
||||
@@ -91,11 +91,12 @@ else
|
||||
bad "⑨ 缺基础镜像源强制网络检测——内网 livebook:8418 / 外网 code.innev.cn 必须运行时探测选址"
|
||||
fi
|
||||
|
||||
# ⑩ FROM 强制优选 <registry>/images 内部源,未命中回退官方源
|
||||
if grep -q 'INNEV_IMAGES_REGISTRY/images/' "$FILE"; then
|
||||
pass "⑩ FROM 优选 <registry>/images 内部源(未命中回退官方源)"
|
||||
# ⑩ FROM 强制落盘 <registry>/images 内部源:命中直接改写,未命中先拉取官方源推送落盘再改写
|
||||
if grep -q 'INNEV_IMAGES_REGISTRY/images/' "$FILE" \
|
||||
&& grep -qE 'docker push.*(CAND|INNEV_IMAGES_REGISTRY)' "$FILE"; then
|
||||
pass "⑩ FROM 未命中先同步入 <registry>/images 落盘再改写(失败回退官方源)"
|
||||
else
|
||||
bad "⑩ 缺 FROM 优选内部源步骤——基础镜像应优先 <registry>/images,未命中回退官方源"
|
||||
bad "⑩ 缺基础镜像同步落盘逻辑——FROM 未命中 images 时应先 docker pull 官方源并 push 入 <registry>/images 落盘再改写,而非仅回退官方源"
|
||||
fi
|
||||
|
||||
if [ "$fail" -ne 0 ]; then
|
||||
|
||||
Reference in new issue
Block a user