AWS CodePipeline + CodeBuild CI/CD实战:从零搭建自动化部署流水线

📅 · AWS 国际版实战教程 - ChengziCloud

一句话结论

Meta Description: AWS CodePipeline+CodeBuild CI/CD完整教程,手把手教你搭建自动化构建、测试、部署流水线,涵盖GitHub集成、构建规范、跨账号部署,附价格对比与常见问题。

本文要点
  • 为什么选择AWS原生CI/CD工具链
  • 核心组件详解:CodePipeline、CodeBuild与CodeDeploy
  • 实战:用CodePipeline+CodeBuild搭建Node.js项目CI/CD
  • 进阶:并行构建、缓存优化与跨账号部署
  • 价格对比:AWS CI/CD vs GitHub Actions vs GitLab CI
  • 最佳实践与安全建议

Meta Description: AWS CodePipeline+CodeBuild CI/CD完整教程,手把手教你搭建自动化构建、测试、部署流水线,涵盖GitHub集成、构建规范、跨账号部署,附价格对比与常见问题。

关键词:AWS CodePipeline教程、AWS CodeBuild实战、CI/CD流水线搭建、AWS自动化部署、CodePipeline价格、CodeBuild定价、AWS DevOps工具链

一、为什么选择AWS原生CI/CD工具链

决策口诀:小团队用CodePipeline+CodeBuild够用,大规模用GitHub Actions或Jenkins更灵活,混合云选AWS CodePipeline统一管控。

CI/CD(持续集成/持续部署)是现代软件开发的基础设施。每次代码提交后自动构建、测试、部署到生产环境,能将发布周期从数周缩短到数小时甚至数分钟。AWS提供了完全托管的CI/CD工具链——CodePipeline编排流水线、CodeBuild执行构建和测试、CodeDeploy部署到EC2/Lambda/ECS/On-Premises——三者配合可以覆盖从代码提交到生产上线的完整链路。

2026年AWS CI/CD工具链的定价依然非常有竞争力:CodePipeline每月免费1条活跃流水线,CodeBuild每月免费100分钟构建时间,CodeDeploy完全免费(仅收取底层EC2/Lambda计算费用)。对于中小团队来说,这套工具链的免费额度足以支撑日常开发需求。

AWS原生CI/CD工具链的核心优势包括:与AWS IAM深度集成实现细粒度权限控制、与S3/ECR/CloudWatch等AWS服务无缝衔接、完全托管无需维护构建服务器、支持跨账号和跨区域部署、内置安全扫描和合规检查、支持自定义构建环境和Docker镜像。对于已经在AWS生态中的团队,CodePipeline+CodeBuild是最省心的选择。

二、核心组件详解:CodePipeline、CodeBuild与CodeDeploy

2.1 CodePipeline流水线编排

CodePipeline是AWS CI/CD的调度中心,负责将代码变更从源仓库触发到构建、测试、部署的完整流程串联起来。每条流水线由多个阶段(Stage)组成,每个阶段包含一个或多个动作(Action)。

CodePipeline的阶段设计遵循标准的CI/CD最佳实践:Source阶段从GitHub/CodeCommit拉取代码、Build阶段触发CodeBuild执行编译和测试、Deploy阶段调用CodeDeploy/ECS/Lambda部署到目标环境。你可以添加自定义阶段,比如手动审批(Manual Approval)阶段,让部署前必须经过负责人确认。

核心概念对照:

概念说明类比
Pipeline一条完整的CI/CD流水线一条工厂流水线
Stage流水线中的一个阶段流水线上的一个工位
Action阶段内的一个操作工位上的一个工人
Artifact阶段间传递的文件包工位之间传递的半成品
Execution一次流水线运行一次生产任务

2.2 CodeBuild构建服务

CodeBuild是AWS的托管构建服务,负责执行实际的编译、测试和打包工作。它从S3或CodeCommit拉取源代码,在隔离的构建环境中执行你定义的构建命令,将产物输出到S3。

CodeBuild的关键配置项包括:构建规范文件(buildspec.yml)定义构建步骤、计算规格(BUILD_GENERAL1_SMALL到BUILD_GENERAL1_LARGE)决定构建速度和成本、环境变量和 Secrets Manager 集成保护敏感信息、缓存配置(S3/Docker层缓存)加速重复构建。

CodeBuild支持两种源代码方式:直接从S3拉取打包好的源码(适合CodePipeline触发),或直接从GitHub/Bitbucket拉取(适合独立使用CodeBuild)。构建完成后,产物可以输出到S3供后续阶段使用。

2.3 CodeDeploy部署服务

CodeDeploy负责将构建产物部署到目标环境。它支持EC2/On-Premises(通过Agent)、ECS(蓝绿部署/金丝雀发布)、Lambda(函数版本更新)三种部署目标。

对于EC2部署,CodeDeploy通过安装在实例上的Deploy Agent执行部署脚本,支持滚动更新、蓝绿部署等策略。对于Lambda部署,CodeDeploy可以直接更新函数版本并执行流量切换。对于ECS部署,CodeDeploy与ALB集成实现蓝绿部署和金丝雀发布。

三、实战:用CodePipeline+CodeBuild搭建Node.js项目CI/CD

3.1 前置准备

搭建CI/CD流水线前,你需要准备以下资源:

  1. AWS账号:已有可跳过。尚未注册请参考 AWS免费套餐注册指南
  2. GitHub仓库:准备一个Node.js项目代码仓库
  3. AWS CLI:安装并配置好AWS CLI访问凭证
  4. S3存储桶:用于存放构建产物

安装AWS CLI并配置凭证:


curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && sudo ./aws/install
aws configure
// 输入 Access Key ID、Secret Access Key、区域、输出格式

3.2 创建buildspec.yml构建规范

在项目根目录创建 buildspec.yml,定义CodeBuild的构建步骤:


version: 0.2

env:
  variables:
    NODE_ENV: production
  parameter-store:
    DB_PASSWORD: /myapp/prod/db-password

phases:
  install:
    runtime-versions:
      nodejs: 18
    commands:
      // 安装依赖
      - npm ci --production
  pre_build:
    commands:
      // 运行测试
      - npm test
      // 代码质量检查
      - npm run lint
  build:
    commands:
      // 构建应用
      - npm run build
      // 运行安全扫描
      - npm audit --production
  post_build:
    commands:
      // 构建后处理
      - echo "Build completed on `date`"
      // 打包构建产物
      - tar -czf artifact.tar.gz dist/ package.json node_modules/

artifacts:
  files:
    - '**/*'
  base-paths:
    - dist
    - package.json
  discard-paths: no

cache:
  paths:
    - 'node_modules/**/*'

3.3 创建CodeBuild项目

通过AWS CLI创建CodeBuild项目:


aws codebuild create-project \
  --name my-nodejs-build \
  --service-role arn:aws:iam::123456789012:role/CodeBuildServiceRole \
  --artifacts type=CODEPIPELINE \
  --environment type=LINUX_CONTAINER,image=aws/codebuild/standard:7.0,computeType=BUILD_GENERAL1_SMALL \
  --source type=CODEPIPELINE,buildspec=buildspec.yml \
  --region us-east-1

3.4 创建完整的CodePipeline

通过AWS CLI创建三阶段流水线——Source、Build、Deploy:


aws codepipeline create-pipeline \
  --pipeline-cli-input-json file://pipeline.json \
  --region us-east-1

其中 pipeline.json 的内容:


{
  "name": "my-nodejs-pipeline",
  "roleArn": "arn:aws:iam::123456789012:role/CodePipelineServiceRole",
  "artifactStore": {
    "type": "S3",
    "location": "my-pipeline-artifacts-bucket"
  },
  "stages": [
    {
      "name": "Source",
      "actions": [{
        "name": "GitHub_Source",
        "actionTypeId": {
          "category": "Source",
          "owner": "ThirdParty",
          "provider": "GitHub",
          "version": "1"
        },
        "configuration": {
          "Owner": "my-github-org",
          "Repo": "my-nodejs-app",
          "Branch": "main",
          "OAuthToken": "{{resolve:secretsmanager:github-token:SecretString}}"
        },
        "outputArtifacts": [{"name": "SourceOutput"}]
      }]
    },
    {
      "name": "Build",
      "actions": [{
        "name": "CodeBuild",
        "actionTypeId": {
          "category": "Build",
          "owner": "AWS",
          "provider": "CodeBuild",
          "version": "1"
        },
        "configuration": {
          "ProjectName": "my-nodejs-build"
        },
        "inputArtifacts": [{"name": "SourceOutput"}],
        "outputArtifacts": [{"name": "BuildOutput"}]
      }]
    },
    {
      "name": "Deploy",
      "actions": [{
        "name": "Deploy_to_EC2",
        "actionTypeId": {
          "category": "Deploy",
          "owner": "AWS",
          "provider": "CodeDeploy",
          "version": "1"
        },
        "configuration": {
          "ApplicationName": "my-nodejs-app",
          "DeploymentGroupName": "production"
        },
        "inputArtifacts": [{"name": "BuildOutput"}]
      }]
    }
  ]
}

3.5 配置GitHub Webhook自动触发

创建好流水线后,AWS会自动在GitHub仓库设置Webhook。每次git push到main分支都会自动触发流水线运行。你也可以手动触发:


aws codepipeline start-pipeline-execution --name my-nodejs-pipeline

查看流水线运行状态:


aws codepipeline get-pipeline-state --name my-nodejs-pipeline \
  --query 'stageStates[*].{Stage:stageName,Status:latestExecution.status}' \
  --output table

四、进阶:并行构建、缓存优化与跨账号部署

4.1 并行构建加速

在CodePipeline中,同一个Stage内的多个Action会并行执行。比如你可以同时运行单元测试和集成测试,将总构建时间缩短一半:


// 在buildspec.yml中使用Phase级别的并行
phases:
  build:
    commands:
      // 并行执行测试和构建
      - npm run test:unit &
      - npm run test:integration &
      - wait

也可以在CodePipeline中添加并行分支——从Source阶段分出两条并行的Build路径,一条跑单元测试,一条跑安全扫描,两者同时进行。

4.2 缓存优化策略

CodeBuild支持两种缓存方式加速构建:

S3缓存:将 node_modules/ 缓存到S3,下次构建时直接拉取,跳过 npm install。适合依赖不频繁变化的项目。

Docker层缓存:如果使用Docker构建,可以缓存Docker镜像层,避免每次重新拉取基础镜像和安装依赖。


cache:
  paths:
    - 'node_modules/**/*'
    - '.next/cache/**/*'
  modes:
    - LOCAL_CUSTOM
    - LOCAL_SOURCE

实测数据显示,启用缓存后Node.js项目的构建时间通常可以缩短40%-60%,从平均8分钟降到3-5分钟。

4.3 跨账号部署

企业环境中,开发、测试、生产通常在不同的AWS账号中。CodePipeline支持通过Cross-Account Role实现跨账号部署:

  1. 在目标账号(生产环境)创建一个IAM Role,允许源账号的CodePipeline assume
  2. 在CodePipeline的Deploy阶段配置该Role的ARN
  3. CodeBuild/CodeDeploy通过该Role访问目标账号的资源

{
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111111111111:role/CodePipelineRole"},
  "Action": "sts:AssumeRole"
}

五、价格对比:AWS CI/CD vs GitHub Actions vs GitLab CI

对比维度AWS CodePipeline+CodeBuildGitHub ActionsGitLab CI/CD
免费额度1条流水线+100分钟构建/月2000分钟/月(公共仓库无限)400分钟/月
超出费用Pipeline $1/条/月,Build $0.002/分钟$0.008/分钟(Linux)$10/月5000分钟
并行构建限制较少,按计算规格付费免费20并发(公共仓库)免费10并发
自托管Runner支持(需EC2实例)支持(自建Runner)支持(Runner + autoscaler)
Docker支持原生支持原生支持原生支持
AWS集成原生深度集成需要配置凭证需要配置凭证
私有仓库无限制私有仓库按用量计费按存储和分钟数计费
安全扫描CodeGuru/Inspector集成Dependabot/Secret ScanningSAST/DAST内置

选型建议:如果你的项目已经托管在GitHub且主要部署到非AWS环境,GitHub Actions是更自然的选择。如果你的基础设施在AWS上,CodePipeline+CodeBuild的原生集成能省去大量配置工作,长期成本也更低。对于同时使用多个云平台的团队,可以考虑GitHub Actions统一管理CI/CD,用AWS CodeDeploy做最终部署。

六、最佳实践与安全建议

6.1 Secrets管理

永远不要在buildspec.yml或pipeline配置中硬编码敏感信息。使用AWS Secrets Manager或SSM Parameter Store存储API密钥、数据库密码、部署凭证:


env:
  parameter-store:
    API_KEY: /myapp/prod/api-key
  secrets-manager:
    DB_PASSWORD: myapp/prod/db:password

6.2 构建环境安全

CodeBuild构建环境默认在隔离的容器中运行,构建结束后环境被销毁。但你仍需要注意:不要在构建日志中打印敏感信息(CodeBuild会自动掩码已注册的Secrets Manager值)、使用VPC配置让构建环境访问私有资源、启用构建加密(S3产物加密)。

6.3 部署策略

推荐的部署策略梯度:

  • 开发环境:直接覆盖部署(最快速)
  • 测试环境:滚动更新(逐台替换)
  • 生产环境:蓝绿部署或金丝雀发布(零停机+快速回滚)

CodeDeploy支持AllAtOnce(全部同时)、OneAtOnce(逐个)、HalfAtOnce(一半)等多种部署配置,根据业务容忍度选择。

6.4 监控与告警

通过CloudWatch监控流水线健康状态:设置CodeBuild构建失败告警、CodePipeline阶段超时告警、部署成功率指标。可以用Amazon EventBridge将CI/CD事件发送到Slack或邮件通知。


aws cloudwatch put-metric-alarm \
  --alarm-name "CodeBuild-Failure" \
  --metric-name "Builds" \
  --namespace "AWS/CodeBuild" \
  --statistic Sum \
  --period 300 \
  --evaluation-periods 1 \
  --threshold 1 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --dimensions Name=ProjectName,Value=my-nodejs-build \
  --alarm-actions arn:aws:sns:us-east-1:123456789012:ci-cd-alerts

七、常见问题FAQ

Q: CodePipeline和CodeBuild有什么区别? A: CodePipeline是流水线编排器,负责定义"先做什么、再做什么"的流程。CodeBuild是实际执行编译、测试、打包的构建服务。简单理解:CodePipeline是流水线的调度员,CodeBuild是流水线上的工人。

Q: CodeBuild的构建环境能访问VPC内的资源吗? A: 可以。在创建CodeBuild项目时配置VPC设置(子网和安全组),构建环境就能访问RDS、ElastiCache等VPC内资源。但注意这会增加构建启动时间(约30秒)。

Q: CodePipeline如何实现手动审批? A: 在流水线中添加一个Stage,Action Type选择"Approval"。配置审批人邮箱或SNS主题,流水线运行到该阶段时会暂停并通知审批人,审批通过后继续执行。

Q: 免费额度够用吗? A: 对于个人项目或小团队,免费额度(1条流水线+100分钟构建/月)通常够用。100分钟大约能支撑每月30-50次完整构建(每次2-3分钟)。超出后,CodePipeline $1/条/月,CodeBuild $0.002/分钟,成本依然很低。

Q: 如何加速CodeBuild构建速度? A: 五步优化法:(1) 启用S3缓存避免重复下载依赖;(2) 使用Docker层缓存加速镜像构建;(3) 选择更大计算规格(BUILD_GENERAL1_MEDIUM);(4) 并行执行测试和构建步骤;(5) 减少不必要的构建步骤(缓存编译结果)。

Q: CodePipeline能部署到Lambda吗? A: 可以。CodeDeploy支持Lambda部署,可以实现版本更新、流量切换(金丝雀/线性/AllAtOnce)和自动回滚。在CodePipeline的Deploy阶段选择CodeDeploy,Application Type选Lambda即可。

八、总结

AWS CodePipeline+CodeBuild构成了一套完整、托管、低成本的CI/CD工具链。对于已经在AWS生态中的团队,这套工具链的原生集成能力能大幅减少配置工作量。免费额度对中小团队非常友好,按量付费的价格也远低于自建Jenkins/GitLab Runner的成本。

在实际落地过程中,很多团队容易陷入两个误区:一是过度设计流水线架构(加了太多审批和检查环节导致发布速度变慢),二是忽视构建缓存和并行优化(每次构建都从零开始浪费时间)。正确做法是先搭建最小可用的三阶段流水线(Source→Build→Deploy),跑通核心流程后再逐步添加安全扫描、手动审批、并行构建等进阶功能。

CI/CD的核心建议可以总结为五句话:先用免费额度跑通流程再考虑付费扩容、Secrets永远用Secrets Manager不要硬编码、生产环境必须用蓝绿部署或金丝雀发布、启用构建缓存能将时间缩短40%-60%、通过CloudWatch监控构建失败率和部署成功率。对于需要AWS原生集成的团队,CodePipeline+CodeBuild是最省心的选择。

如果你的项目已经在GitHub上且部署目标不在AWS,GitHub Actions可能是更自然的选择。但如果你的基础设施在AWS上,CodePipeline的原生集成能力值得投入学习。结合AWS免费套餐,即使是个人开发者也能以极低成本体验企业级CI/CD能力。

⚠️ 文中价格为 2026 年参考价,实际费用随区域和官方调价变动,请以 AWS 官网为准。

🚀 需要 AWS 国际版账号?通过 3.chengzicloud.cloud 获取最新注册教程与专属优惠,助你轻松上云。

本文由 3.chengzicloud.cloud 提供,点击访问首页了解更多