fix(ci): unify concurrency group and enable cancel-in-progress for all events #1287

Closed
xiaoxia wants to merge 0 commits from fix/ci-concurrency-lock into develop
Owner

问题

develop 分支 push 事件的并发控制不正常:多个 Run 同时执行未被序列化,导致镜像构建/部署可能互相干扰。

根因

  1. concurrency.group 包含 gitea.event_name,导致 PR 和 push 事件各自成组,可能同时运行
  2. cancel-in-progress 仅在 PR 事件时为 true,push 事件不取消旧 Run

修复

修改 .gitea/workflows/ci-pipeline.yml 顶部的 concurrency 配置:

# 原来:
concurrency:
  group: ci-pipeline-${{ gitea.event_name }}-${{ gitea.ref }}
  # PR事件取消进行中的旧run,push事件不取消(确保完整CI跑完)
  cancel-in-progress: ${{ gitea.event_name == 'pull_request' }}

# 改为:
concurrency:
  group: ci-pipeline-${{ gitea.ref }}
  cancel-in-progress: true

关键变更

  • 去掉 event_name 区分,统一用 gitea.ref 作为 group key
  • cancel-in-progress: true,所有事件都取消旧 Run

影响

  • 同一分支(develop/main)同一时刻只有一个 CI Run 在执行
  • 新的 push 会取消正在进行的旧 Run
  • develop 分支只需部署最新 commit,旧 commit 的 Run 被取消不影响最终结果
  • 避免镜像构建/部署并发冲突
## 问题 develop 分支 push 事件的并发控制不正常:多个 Run 同时执行未被序列化,导致镜像构建/部署可能互相干扰。 **根因**: 1. `concurrency.group` 包含 `gitea.event_name`,导致 PR 和 push 事件各自成组,可能同时运行 2. `cancel-in-progress` 仅在 PR 事件时为 true,push 事件不取消旧 Run ## 修复 修改 `.gitea/workflows/ci-pipeline.yml` 顶部的 concurrency 配置: ```yaml # 原来: concurrency: group: ci-pipeline-${{ gitea.event_name }}-${{ gitea.ref }} # PR事件取消进行中的旧run,push事件不取消(确保完整CI跑完) cancel-in-progress: ${{ gitea.event_name == 'pull_request' }} # 改为: concurrency: group: ci-pipeline-${{ gitea.ref }} cancel-in-progress: true ``` **关键变更**: - 去掉 `event_name` 区分,统一用 `gitea.ref` 作为 group key - `cancel-in-progress: true`,所有事件都取消旧 Run ## 影响 - 同一分支(develop/main)同一时刻只有一个 CI Run 在执行 - 新的 push 会取消正在进行的旧 Run - develop 分支只需部署最新 commit,旧 commit 的 Run 被取消不影响最终结果 - 避免镜像构建/部署并发冲突
xiaoxia added 1 commit 2026-08-07 22:14:43 +08:00
fix(ci): unify concurrency group and enable cancel-in-progress for all events
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 51s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 52s
AI Code Review / AI Code Review (pull_request) Successful in 56s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m31s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m8s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m20s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m39s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m55s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m3s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 4m56s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m16s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 9m48s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 33s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 51s
1742db77a4
- Remove event_name from concurrency group key, use only gitea.ref
- Change cancel-in-progress to always true (was conditional on pull_request)
- Ensures only one CI run per branch at any time, old runs are cancelled
- Prevents concurrent image builds/deployments from interfering

Fixes develop push concurrency lock issue

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1287 | | 预览链接 | [https://pr-1287.preview.xiaoxiajianji.com](https://pr-1287.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-08-08 12:45:55 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-08 12:45:55 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia closed this pull request 2026-08-08 12:49:42 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #1287 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 51s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 52s
AI Code Review / AI Code Review (pull_request) Successful in 56s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m31s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m8s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m20s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m39s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m55s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m3s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 4m56s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m16s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 9m48s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 33s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 51s

Pull request closed

Sign in to join this conversation.