用途
该技能聚焦于交付工程中的流水线设计与发布晋级策略。当项目存在 CI/CD 流水线(*.yml)、发布策略、环境间晋级,或需要制定 rollout/rollback 计划时启用;也适用于在具体变更面前,于 rolling、blue-green、canary 或功能开关之间做选型。
不适用:Swarm 集群内部的低层部署(应使用 $specsfy-specialist-docker-swarm);判断 rollout 是否健康的客观信号(应使用 $specsfy-specialist-observability)。本技能的重点是流水线设计与晋级策略。若流水线涉及生产凭据或发布已签名制品,应与 $specsfy-specialist-application-security 配合使用。
主要能力(流程)
完整的 release 或部署场景下,在 $specsfy-specialist-deploy 下工作,并使用 $specsfy-specialist-versioning 准备的 SEMVER 生成制品、changelog 与 tag。
设计流水线前,先梳理 commit、制品、环境、所需审批以及每次晋级的 owner。
基于版本化的 lockfile 使构建与测试可复现——绝不在构建时解析“最新”依赖。
只生成一次不可变制品,并在环境间晋级时不再重新编译(在 staging 测试的二进制与发布到生产的逐位一致)。
按 job 隔离凭据、权限与信任边界——构建 job 不持有发布到生产的凭据。
在整个 rollout 窗口内协调 schema 迁移与应用新旧版本的兼容性(expand/contract)。
在首次真实部署前,就定义好 rollout 策略、客观成功信号、暂停判据与回滚机制。
以可审计方式记录来源(制品出处)、版本、测试证据与 rollout 结果。
规范
最小权限、临时凭据(用 OIDC/STS 而非长期静态 secret),以及按 hash 或精确版本固定 actions/流水线依赖,而非移动标签(@latest、@main)。
不要为每个环境重建制品;构建一次,签名或生成 digest,晋级同一个不可变引用。
阻止不兼容的并发(同一服务两个部署同时进行),并阻止未通过完整测试流水线的 commit 被部署。
用基础设施即代码保持环境可复现;环境配置留在制品之外(env vars、secret manager),绝不内嵌进构建。
在认为 rollout 完成前,要求功能 smoke check 与主动可观测性——“部署无错误结束”不等于“服务健康”。
把代码回滚(回退到上一个二进制)与数据回滚(回退已应用的迁移)视为两个不同问题,各有不同方案——并非每个迁移都可无数据损失地回退。
保留“谁在何时以何种审批晋级了什么”的可审计轨迹,且绝不在日志或审计制品中记录密钥。
反模式
在每个环境重新构建镜像的流水线(staging job 构建一次、production job 再构建一次):在 staging 测试的制品无法保证与上生产的相同,即使 Dockerfile 相同——解析“latest”依赖或不同缓存会产生不同二进制。
没有 owner 也没有过期时间的功能开关:堆积无人记得用途的死开关,扩大未测试组合的暴露面。
在删除旧列的同一部署中应用 schema 迁移:若代码回滚需针对已变更的 schema 运行,就会破坏上一版本应用——应在一个部署中 expand(添加),等没有旧版本依赖该列后再 contract(删除)。
生产 secret 可被运行于外部 fork PR 的 job 访问:外部 PR 上下文不应访问任何受保护环境的 secret。
验证
流水线 lint/静态校验,在安全分支完整执行,并故意做一次失败测试(关键 step 失败时流水线确实停止且不晋级制品)。
在项目采用这些实践时,校验制品 digest、SBOM 与签名/来源证明(attestation)。
首次生产执行前,在代表性环境完整演练 rollout 与 rollback——不能只阅读提供商配置。
确认审批门禁、branch protection 与提供商侧权限(不仅是 workflow 文件,因为它可能被有 push 权限的人覆盖)。
缺乏这些证据时,不要宣称流水线“安全”或 rollout“完成”;日志无错误不是服务健康的证明。
相关技能
$specsfy-specialist-deploy 协调完整 release 与部署;本技能负责流水线与晋级。
$specsfy-specialist-versioning 准备 SEMVER,并让制品、changelog、tag 与晋级之间的编号保持一致。
$specsfy-specialist-ansible 在主机上应用幂等配置;本技能治理交付的晋级、审批与来源。
$specsfy-specialist-software-architecture 定义流水线在环境间落地的边界与结构约束。
$specsfy-specialist-observability 提供决定继续、暂停或回滚 rollout 的客观信号(错误、延迟、饱和度)。
$specsfy-specialist-docker-swarm:当部署目标是 Swarm 集群时,本技能负责设计到晋级点的流水线,另一技能执行集群内 rollout。
$specsfy-specialist-application-security 用于流水线凭据加固、供应链与制品签名。
$specsfy-specialist-performance-engineering:当 rollout 在放开全量流量前需要性能基线时使用。
$specsfy-specialist-gitflow:当项目声明以 Gitflow 作为分支策略时,该技能产出正确的分支与 tag(release//hotfix/ 合并进 main),本技能决定流水线如何对其作出反应。
阅读 references/standards.md 了解最小流水线阶段、发布策略比较与供应链,附官方来源。