fix(ci): push :dev tag to registry for watchtower auto-update #1888

Merged
auto-approve-bot merged 1 commits from fix/ci-push-dev-tag into develop 2026-09-14 14:26:05 +08:00
Owner

问题

scripts/build_release_images.sh 在构建 Docker 镜像时只 push 了 SHA/版本 tag,没有 push :dev floating tag。导致 staging 的 Watchtower(监听 :dev 做自动更新)找不到新镜像,无法触发自动 pull + restart。

修改内容

1. scripts/build_release_images.sh

  • 新增 WEB_DEV 本地 tag(原脚本漏了 web 的 dev tag,仅 API/WORKER 有)
  • 将 API_LATEST/WORKER_LATEST 重命名为 API_DEV/WORKER_DEV/WEB_DEV,语义更清晰
  • 新增 REGISTRY_API_DEV/REGISTRY_WORKER_DEV/REGISTRY_WEB_DEV 三个 registry 级 :dev tag
  • 新增 PUSH_DEV_TAG 判断:仅当 BUILD_ENV=staging 或 BRANCH_NAME=develop 时才额外 tag 并 push :dev tag;production/release tag 构建不推送,避免污染生产
  • 构建 web 镜像时也同时打 -t "$WEB_IMAGE" -t "$WEB_DEV"(原来 web 只打了 VERSION tag)

2. scripts/ci_staging_deploy.sh

  • 在 pull 段加注释强调:必须使用 IMAGE_TAG(commit SHA)做确定性部署,不要改成 :dev。:dev 是 floating tag,可能被并发覆盖,部署/回滚必须锚定 SHA。Watchtower 才是 :dev tag 的消费者。

影响范围

  • ❌ 不影响生产构建:production/release 场景 PUSH_DEV_TAG=0,行为完全不变
  • ✅ staging/develop 构建:push 完 SHA tag 后额外 push 三个 :dev tag,Watchtower 可立即感知新镜像触发自动更新
  • ✅ REGISTRY 环境变量仍可由 CI 覆盖指向阿里云 ACR(脚本默认 git.xiaoxiajianji.com,CI 实际传 xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com/xiaoxiakeji)
  • ✅ bash -n 两个脚本语法检查通过

验证

  • bash -n scripts/build_release_images.sh scripts/ci_staging_deploy.sh 通过
  • 未动 production 部署脚本及其他无关文件
## 问题 `scripts/build_release_images.sh` 在构建 Docker 镜像时只 push 了 SHA/版本 tag,没有 push `:dev` floating tag。导致 staging 的 Watchtower(监听 `:dev` 做自动更新)找不到新镜像,无法触发自动 pull + restart。 ## 修改内容 ### 1. `scripts/build_release_images.sh` - 新增 `WEB_DEV` 本地 tag(原脚本漏了 web 的 dev tag,仅 API/WORKER 有) - 将 `API_LATEST/WORKER_LATEST` 重命名为 `API_DEV/WORKER_DEV/WEB_DEV`,语义更清晰 - 新增 `REGISTRY_API_DEV/REGISTRY_WORKER_DEV/REGISTRY_WEB_DEV` 三个 registry 级 `:dev` tag - 新增 `PUSH_DEV_TAG` 判断:**仅当 `BUILD_ENV=staging` 或 `BRANCH_NAME=develop` 时**才额外 tag 并 push `:dev` tag;production/release tag 构建不推送,避免污染生产 - 构建 web 镜像时也同时打 `-t "$WEB_IMAGE" -t "$WEB_DEV"`(原来 web 只打了 VERSION tag) ### 2. `scripts/ci_staging_deploy.sh` - 在 pull 段加注释强调:必须使用 `IMAGE_TAG`(commit SHA)做确定性部署,**不要改成 `:dev`**。`:dev` 是 floating tag,可能被并发覆盖,部署/回滚必须锚定 SHA。Watchtower 才是 `:dev` tag 的消费者。 ## 影响范围 - ❌ 不影响生产构建:production/release 场景 `PUSH_DEV_TAG=0`,行为完全不变 - ✅ staging/develop 构建:push 完 SHA tag 后额外 push 三个 `:dev` tag,Watchtower 可立即感知新镜像触发自动更新 - ✅ `REGISTRY` 环境变量仍可由 CI 覆盖指向阿里云 ACR(脚本默认 `git.xiaoxiajianji.com`,CI 实际传 `xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com/xiaoxiakeji`) - ✅ `bash -n` 两个脚本语法检查通过 ## 验证 - `bash -n scripts/build_release_images.sh scripts/ci_staging_deploy.sh` 通过 - 未动 production 部署脚本及其他无关文件
xiaoxia added 1 commit 2026-09-14 14:16:22 +08:00
fix(ci): push :dev tag to registry for watchtower auto-update
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m57s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m22s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m32s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m44s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m8s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 3m28s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 5m1s
AI Code Review / AI Code Review (pull_request) Successful in 6m17s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 8m28s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 9m2s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 6m56s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 8s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 50s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 48h58m19s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 49h7m13s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 49h7m20s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 48h57m53s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 49h6m53s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 49h6m59s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 49h6m59s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 48h57m49s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 48h57m53s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 49h6m48s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 49h6m48s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 49h6m49s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 49h6m54s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 48h57m49s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 49h6m54s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 49h6m54s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 49h6m59s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 49h7m0s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 49h42m15s
55af4a8877
## 问题
scripts/build_release_images.sh 在构建 Docker 镜像时只 push 了 SHA/版本 tag,没有
push :dev floating tag。导致 staging 的 Watchtower(监听 :dev 做自动更新)找不到
新镜像,无法触发自动 pull + restart。

## 修改
1. scripts/build_release_images.sh:
   - 新增 WEB_DEV 本地 tag(原脚本漏了 web 的 dev tag,仅 API/WORKER 有)
   - 将 API_LATEST/WORKER_LATEST 重命名为 API_DEV/WORKER_DEV/WEB_DEV,语义更清晰
   - 新增 REGISTRY_API_DEV/REGISTRY_WORKER_DEV/REGISTRY_WEB_DEV 三个 registry 级 :dev tag
   - 新增 PUSH_DEV_TAG 判断:仅当 BUILD_ENV=staging 或 BRANCH_NAME=develop 时才
     额外 tag 并 push :dev tag;production/release tag 构建不推送,避免污染
   - 构建 web 镜像时也同时打 -t "$WEB_IMAGE" -t "$WEB_DEV"(原来 web 只打了 VERSION tag)

2. scripts/ci_staging_deploy.sh:
   - 在 pull 段加注释强调:必须使用 IMAGE_TAG(commit SHA)做确定性部署,
     不要改成 :dev。:dev 是 floating tag 可能被并发覆盖,部署/回滚必须锚定 SHA。
     Watchtower 才是 :dev tag 的消费者。

## 影响范围
- 不影响生产构建:production/release 场景 PUSH_DEV_TAG=0,行为不变
- staging/develop 构建:push 完成 SHA tag 后额外 push 三个 :dev tag,Watchtower
  可立即感知新镜像并触发自动更新
- REGISTRY 环境变量仍可由 CI 覆盖指向阿里云 ACR(默认 git.xiaoxiajianji.com)
- bash -n 语法检查通过

🚀 预览环境已部署

项目 详情
PR号 #1888
预览链接 https://pr-1888.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1888 | | 预览链接 | [https://pr-1888.preview.xiaoxiajianji.com](https://pr-1888.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot merged commit 628fc6c4e6 into develop 2026-09-14 14:26:05 +08:00
auto-approve-bot deleted branch fix/ci-push-dev-tag 2026-09-14 14:26:06 +08:00

🗑️ 预览环境已清理

PR #1888 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1888 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.