---
title: "什么是 Continuous Delivery？"
canonical: https://wavect.io/zh/glossary/continuous-delivery/
language: zh
description: "每一次变更都被自动准备成可发布形态。最后是否真的发布到生产，仍由人来按下那个按钮。"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

方法

# Continuous Delivery

每一次变更都被自动准备成可发布形态。最后是否真的发布到生产，仍由人来按下那个按钮。

最近审阅: 2026-05-24 审阅人 [Kevin Riedl](/zh/team/kevin-riedl/) [wiki ↗](https://www.wikidata.org/wiki/Q139796365)

Continuous Delivery 是 Continuous Deployment 的负责任表亲。每一次变更都走过同一条自动化的构建、测试与发布准备流水线（即 [CI/CD](/zh/glossary/ci-cd/) 骨干）。出来的产物是可发布的。它是否真的发布，是一个人的判断。

多数团队停在 CD 而不进到完整 Continuous Deployment 的原因：一次糟糕发布的代价高到让环节里的一个人值这点延迟。当你的监控、测试覆盖与回滚故事都好到那个人已不再贡献信号时，再进到 Continuous Deployment。

按服务而非按公司来选，举个实际例子：同一家公司跑着一个营销站点和一个支付账本。营销站点非常适合完整的 Continuous Deployment，那里一次糟糕发布意味着一个拼写错误、回滚也很琐碎，所以每个通过的构建都能无人值守地发布。支付账本留在 Continuous Delivery、由一个人按按钮，因为那里一次糟糕发布会错误地移动钱，那个人是真正在贡献信号，而不只是延迟。把「我们要不要自动化部署」当作一个全公司统一的决定，正是那个错误；它是一个按服务的风险判断。

有一个值得点名的监管维度。在有变更控制或审计要求的领域（金融、医疗、任何在 GDPR 下触及个人数据的东西），Continuous Delivery 里那一步人工批准不只是风险管理，它往往就是审计师期望看到的那项书面控制：谁批准了这次发布、对着什么证据、在何时。这些场景里的团队不应当把完整 Continuous Deployment 当作一枚成熟度勋章去追；那道手动闸门是他们合规故事所依赖的一项特性。把直到按钮之前的一切自动化，然后把按钮留在审计链需要它的地方。

诚实的取舍：Continuous Delivery 给你近乎完整自动化的大部分速度，同时在那个不可逆的步骤上保留人的否决权，代价是当那个人慢了或不在时，否决权会成为瓶颈。毕业到它之上的前提是真实的、不是空想的：一套 [TDD](/zh/glossary/tdd/) 支撑、团队敢在后面发布的套件、一次以分钟而非小时计的回滚，以及一个待命轮值。没有这三样，「Continuous Delivery」就是一个没人敢按的按钮，而那条流水线只是叠在一段本来健康的 [SDLC](/zh/glossary/sdlc/) 之上的装饰。

// FAQ

## 常见问题

### Continuous Delivery 还是 Continuous Deployment？

当一次糟糕发布的代价高到让环节里的一个人能贡献信号时，用 CD。当监控、回滚和测试覆盖都成熟到那个人只是在增加延迟时，用 Continuous Deployment。大多数团队应当以 CD 为目标，并按服务逐个毕业到 Continuous Deployment。

### 真正的 CD 的前提是什么？

一套团队信得过、敢在后面发布的自动化测试套件，一条以分钟而非小时计的回滚路径，以及一个在部署点着什么时能响应的待命轮值。没有这三样，CD 就是一个没人敢按的按钮。

相关术语

- [CI/CD](/zh/glossary/ci-cd/)
- [TDD](/zh/glossary/tdd/)
- [SDLC](/zh/glossary/sdlc/)

相关服务

- [软件开发](/zh/services/software-development/)

相关案例研究

- [Polity](/zh/case-studies/polity/)

相关指南

- [软件开发流程：从首次通话到完整交接](/zh/software-development-guide/software-development-process/)

聊聊

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/zh/glossary/continuous-delivery/#term",
      "@type": "DefinedTerm",
      "alternateName": [
        "CD",
        "持续交付"
      ],
      "description": "每一次变更都被自动准备成可发布形态。最后是否真的发布到生产，仍由人来按下那个按钮。",
      "inDefinedTermSet": "https://wavect.io/zh/glossary/#termset",
      "name": "Continuous Delivery",
      "termCode": "continuous-delivery",
      "url": "https://wavect.io/zh/glossary/continuous-delivery/"
    },
    {
      "@id": "https://wavect.io/zh/glossary/continuous-delivery/#webpage",
      "@type": "WebPage",
      "about": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "author": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "dateModified": "2026-05-24",
      "description": "每一次变更都被自动准备成可发布形态。最后是否真的发布到生产，仍由人来按下那个按钮。",
      "headline": "Continuous Delivery",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-05-24",
      "mainEntity": {
        "@id": "https://wavect.io/zh/glossary/continuous-delivery/#term"
      },
      "mentions": [
        {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        }
      ],
      "name": "Continuous Delivery",
      "reviewedBy": {
        "@id": "https://wavect.io/team/christof-jori/#person",
        "@type": "Person",
        "name": "Christof Jori",
        "url": "https://wavect.io/team/christof-jori/"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".gls-single__h1",
          ".gls-single__tldr"
        ]
      },
      "url": "https://wavect.io/zh/glossary/continuous-delivery/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/",
          "name": "首页",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/glossary/",
          "name": "技术、产品与合作模式术语表",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/glossary/continuous-delivery/",
          "name": "Continuous Delivery",
          "position": 3
        }
      ]
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "当一次糟糕发布的代价高到让环节里的一个人能贡献信号时，用 CD。当监控、回滚和测试覆盖都成熟到那个人只是在增加延迟时，用 Continuous Deployment。大多数团队应当以 CD 为目标，并按服务逐个毕业到 Continuous Deployment。"
      },
      "name": "Continuous Delivery 还是 Continuous Deployment？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "一套团队信得过、敢在后面发布的自动化测试套件，一条以分钟而非小时计的回滚路径，以及一个在部署点着什么时能响应的待命轮值。没有这三样，CD 就是一个没人敢按的按钮。"
      },
      "name": "真正的 CD 的前提是什么？"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
