首页/开发/CI/CD 与发布速查/构建号与流水线序号
构建与制品管理58 条

构建号与流水线序号

单调递增的构建编号(CI_PIPELINE_IID / GITHUB_RUN_NUMBER / BUILD_NUMBER)用于区分同名版本的多次构建,方便追溯与排序。

CI/CD 与发布速查开发更新于 2026-10-13

构建号是什么

构建号是流水线平台自动维护的单调递增编号:GitLab 的 CI_PIPELINE_IID、GitHub 的 github.run_number、Jenkins 的 BUILD_NUMBER 都是同一类东西。它用来区分「同名版本的多次构建」,方便排序、追溯与问题定位。注意它只是顺序标识:不跨平台可比,也不携带语义,不应单独作为发布版本使用。

基本信息

适用平台GitLab CI、GitHub Actions、Jenkins 等流水线平台
平台变量GitLab $CI_PIPELINE_IID(项目内递增);GitHub github.run_number;Jenkins $BUILD_NUMBER
用途构建产物命名、发布记录排序、问题定位、产物溯源
注意不跨平台可比,仅用于同一系统内的顺序标识

典型使用场景

  • 产物命名:app-1.8.0-build.42.tar.gz,同名版本之间可区分
  • 问题定位:线上 version.txt 里的构建号对应到具体流水线与提交
  • 排序追溯:发布记录按构建号排,比时间戳更可靠
  • 版本组合:正式版本号 + 构建号(1.8.0+build.42)兼顾语义与顺序
  • 排查重复发布:同名版本多次构建时,用它识别「到底发的哪一次」
  • 本地与 CI 统一变量:脚本读同一个构建标识,CI 内由平台变量填充、本地回退占位值,避免两套写法

组合版本写法

组合版本写法
VERSION="1.8.0+build.${CI_PIPELINE_IID:-local}"  # CI 内取平台编号,本地回退 local
echo "$VERSION" > dist/version.txt  # 写进制品元数据,线上核版一查即明
# 镜像标签不要只用构建号:语义标签 + 构建号并存,发布记录更稳
把构建号写进制品元数据(如 version.txt 或镜像注解),线上核对版本时一查即明,省去「翻 CI 界面反查」的时间。
构建号在不同平台的语义细节不同:GitLab 的 IID 是项目内可见编号,另有全局 id;GitHub 的 run_number 按工作流递增,重建同一提交也会继续增长,看到「编号不一致」属正常。
构建号只保证递增、不保证连续:失败重试、取消、跳过都会消耗编号,不能用相邻编号的差值推算任何数量。

易错点

  • 用构建号直接当发布版本:语义缺失、跨流水线不可比,只作补充标识
  • 重置流水线后构建号回绕:发布记录出现重复编号,历史查询需以制品摘要为准
  • 并发流水线按编号推断先后:编号在触发时分配,带队列时顺序不代表完成顺序
  • 把平台变量名写死进脚本:换平台(如 Jenkins 迁 GitHub)时全部失效,抽象成统一变量再输出
  • 跨平台展示不注明来源:42 号到底指哪条平台流水线无人说得清,展示时带上平台名与链接

数据来源与参考

  • GitLab Docs《Predefined CI/CD variables》
  • GitHub Docs《Contexts》
  • Jenkins Docs《Environment variables》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌