返回知识库

工程与栈 · 部署与上线

构建产物Build Artifact

构建产物是 CI 打完的定稿包:带哈希、能回指 commit。上线和回滚都按这份包取,而不是「最新源码」。

先认出这只包装箱,再决定按什么上线

下面就是 CI 打完的那份构建产物:默认已打包、尚未上线。点「按这份哈希上线」,章会盖在箱子上;再试 latest 回滚,失败也写在同一只箱子上。

CI 产物 · registry已打包 · 尚未上线

app-web v2

app-web@sha256:c7e2f08a
  • index.html1.2 KB
  • app.c7e2f08a.js28.9 KB
  • vendor.7c2e8d4f.css8.1 KB

来源 commit 8b1e4d7 · 内容不变则哈希不变

已打包 · 尚未上线结果章盖在这只箱子上。

原因:箱子已经打好,哈希由内容决定。下一步:点「按这份哈希上线」,看章盖在箱子上。

知识点:产物不是最新源码

箱子上的章已经演示了核心关系,这里只给可复用的命名。

  • 不可变:同一份内容对应同一个哈希;改一行就是新箱子,旧箱子本身不变。
  • 可寻址:用名称@哈希精确取回,例如 app-web@sha256:c7e2f08a。
  • 可追溯:箱子带来源 commit 和文件清单,出问题能反查当时那次 build。
  • latest 是浮动标签,回滚时它可能已指向新包,取不回你测过的那份。

什么时候用、怎么用

产物出现在代码要离开本机、交给真实用户或 CI 的那一刻。

  • 信号:要预览、上线、回滚,或需要证明「线上跑的就是测过的那份」。
  • 适用:CI 构建后推 registry、按哈希部署、出问题按哈希回滚。
  • 不适用:本机写代码时的热更新;每次保存都打生产包会拖慢反馈。
  • 最短路径:build 打箱 → 用哈希命名 → 按哈希上线 → 出问题按哈希取回。

正反例:同一只箱子,只换取法

目标都是回滚到昨天测过的登录页,只改部署时按什么取。

正例部署 app-web@sha256:c7e2f08a

线上锁住这只箱子。回滚时 registry 精确返回同一份,新 build 顶不掉它。

反例部署 app-web:latest

latest 已指向今天的新包,昨天那份哈希没记下,回滚取不回。失败写在箱子上。

快速自测

线上登录页出 bug,你想回到昨天测过的那版。app-web:latest 现在指向今天的新 build。该用什么回滚?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。