持续部署是一种在每次代码变更通过所有验证阶段后自动将其部署到生产环境的实践。与需要手动确认的持续交付不同,这种模式消除了部署过程中的人为因素。根据 Puppet State of DevOps, 2025 报告,配置了CD的团队比传统方法实现了106倍更频繁的部署。
要点
持续部署是一种开发方法,每次通过所有自动化检查的代码变更都会自动部署到生产环境中。该过程无需手动批准 — 如果代码通过了编译、测试和分析,它会立即到达用户手中。
CD的概念与DevOps文化密切相关,需要高度的自动化。团队必须信任其测试,并拥有快速回滚机制以应对问题。没有这些条件,自动部署将变得有风险。
根据Google Cloud DORA, 2025,精英执行者每天多次部署代码,而低效团队每月一次。这种差距正是通过持续部署和相关CI/CD实践实现的。
在传统方法中,版本发布每隔几周或几个月进行一次。开发人员积累变更,导致复杂的合并和冲突。CD颠覆了这种模式:变更在完成后立即逐个发布。这降低了每个版本的复杂性,简化了问题定位。
实施CD需要功能开关(feature toggles),允许向用户隐藏未完成的功能。没有它们,开发人员无法安全地合并未完成的功能。还需要全面的监控和告警 — 如果部署破坏了环境,团队必须在几分钟内得知。
在CD中,质量保证不是单独的阶段,而是一个持续的过程。每次提交都要经过数百或数千个自动化测试:单元测试、集成测试、UI测试和截图测试。只要有一个测试失败 — 部署就会被阻止,直到修复完成。
CI、CD和持续交付这些术语经常被混淆,尽管它们描述了代码交付自动化的不同阶段。理解这些差异对于构建正确的流水线至关重要。
| 实践 | 功能 | 结果 |
|---|---|---|
| CI(持续集成) | 每次提交时自动编译和测试 | 代码始终处于工作状态 |
| 持续交付 | CI + 自动准备发布(手动部署触发) | 版本随时可以部署 |
| 持续部署 | 持续交付 + 自动部署到生产环境 | 变更无延迟地到达用户 |
持续集成(CI) — 两种模式的基础。没有它,持续交付和CD都无法实现。CI保证代码没有被破坏,并为后续阶段做好准备。
持续交付 — 是指团队可以随时按下按钮发布版本。与CD的区别在于,持续交付将最终决定权留给人类(发布经理或DevOps工程师)。CD则完全消除了这一关卡。
对于有监管要求的项目(金融科技、医疗)或每个版本都要经过强制手动检查(利益相关者批准)的情况,没有完全自动化的持续交付是更安全的选择。CD最适合SaaS产品和更新周期快的移动应用。
完整的CD流水线包括多个连续的阶段。每个阶段过滤缺陷 — 如果阶段成功通过,代码进入下一阶段。让我们看看移动应用的典型链。
一切从推送到代码仓库开始。CI服务器(例如GitHub Actions或Jenkins)收到webhook通知,加载最新版本的代码并启动编译。对于Android,可能是 `./gradlew assembleRelease`,对于iOS — `xcodebuild -workspace App.xcworkspace -scheme App -configuration Release`。
name: CI Pipeline
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Android APK
run: ./gradlew assembleRelease
- name: Run Unit Tests
run: ./gradlew test DebugUnitTestCoverage
编译成功后,开始运行测试:单元测试、集成测试、UI测试和静态代码分析。质量控制体系检查代码覆盖率、漏洞存在性和代码风格合规性。如果未达到阈值 — 流水线停止。
如果所有测试都通过,工件将自动部署到预发布环境。在那里执行端到端测试和性能测试。在此阶段,可以连接外部服务的集成检查。
最后阶段 — 发布到生产环境。为了降低风险,使用金丝雀发布(canary releases),新版本首先提供给一小部分用户。如果指标稳定 — 流量逐渐增加到100%。
pipeline {
agent any
stages {
stage('Build') {
steps {
sh './gradlew assembleRelease'
}
}
stage('Test') {
steps {
sh './gradlew test'
}
}
stage('Deploy') {
steps {
sh './deploy.sh --canary 5%'
}
}
}
post {
failure {
notify 'devops-team'
}
}
}
市场上有很多支持CD的平台。选择取决于技术栈、团队规模和基础设施预算。让我们看看主要的类别及其代表。
GitHub Actions、GitLab CI/CD、CircleCI和Bitbucket Pipelines提供内置的流水线支持。它们与云注册表(Docker Hub、GitHub Container Registry)集成,并支持部署到AWS、Google Cloud、Azure和Firebase App Distribution。
Spinnaker、ArgoCD和Flux — 专门专注于CD的工具。它们提供高级部署策略:蓝绿、金丝雀、滚动更新。ArgoCD在Kubernetes生态系统中特别受欢迎,这得益于GitOps方法,其中基础设施状态在Git仓库中描述。
Fastlane — 在App Store和Google Play上自动化编译和发布的实际标准。它与CI服务器集成,管理代码签名、截图、通过TestFlight和Internal App Sharing的beta分发。Bitrise和Codemagic — 专门用于移动应用的CI/CD工具。
# Fastfile — Fastlane 配置
default_platform(:android)
platform :android do
desc "Deploy a new version to Google Play"
lane :deploy do
gradle(task: 'assembleRelease')
upload_to_play_store(
track: 'production',
release_status: 'completed'
)
end
end
向持续部署过渡不仅需要技术准备,还需要团队文化的改变。没有正确的实践,自动部署可能导致频繁的事件和对流程信任度的下降。
功能标志允许将未完成的代码部署到生产环境,但向用户隐藏。这是CD的基础 — 开发人员可以随时合并变更,而无需等待功能完成。LaunchDarkly、Flagsmith和ConfigCat是管理功能标志的流行平台。
没有指标,就无法评估部署的成功。关键指标:响应时间(延迟)、错误率、吞吐量。使用Datadog、New Relic或Grafana等工具实时监控每次发布。
CD的关键实践 — 自动回滚机制。如果部署后指标恶化(错误率超过阈值),系统应自行回滚到之前的版本。这将恢复时间(MTTR)从数小时缩短到数分钟。
CD流水线是宝贵的资产,也是潜在的攻击目标。使用机密管理(Vault、AWS Secrets Manager),签署工件和容器,扫描依赖项的漏洞(Dependabot、Snyk)。切勿在仓库中存储访问密钥。
常见问题
持续交付准备版本,但需要手动确认才能部署到生产环境。持续部署也自动化了这一步骤 — 代码通过所有检查后,无需人工干预即可到达用户手中。
技术上可以,但这大大复杂化了流程。没有功能标志,开发人员无法合并未完成的代码,这会减慢工作速度并增加合并时冲突的风险。
对于从零开始的小团队 — 2到6个月。时间取决于当前的自动化水平、项目的复杂性和团队对流程变更的准备程度。
基本DORA指标:部署频率、变更前置时间、平均恢复时间(MTTR)和变更失败率。
不适用于有严格监管要求的项目(例如医疗或金融系统),通常需要手动批准每个版本。在这种情况下,持续交付更合适。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。