AWS持续集成实战:从CodeCommit到CodeDeploy的完整搭建指南。

AWS持续集成实战:从CodeCommit到CodeDeploy的完整搭建指南。
最新回答
听萧与声

2021-11-20 21:51:40

AWS持续集成实战:从CodeCommit到CodeDeploy的完整搭建指南以下为基于AWS服务的持续集成(CI)流程搭建步骤,涵盖CodeCommit、EventBridge、CodeBuild、S3和CodeDeploy的协同配置,结合实战踩坑经验优化流程。

一、核心组件与交互逻辑
  • CodeCommit:托管源代码的Git仓库,所有代码变更需提交至此。
  • EventBridge:捕获CodeCommit的提交事件,触发后续构建流程。
  • CodeBuild:根据buildspec.yml编译代码、运行测试,生成部署包并上传至S3。
  • S3:存储CodeBuild生成的部署包(推荐ZIP格式)。
  • CodeDeploy:从S3拉取部署包,自动部署到EC2实例。

二、分步骤搭建指南1. 配置CodeCommit代码仓库
  • 创建仓库

    进入AWS CodeCommit控制台,点击“创建仓库”,输入名称(如discount-ski-tool)。

    本地通过Git克隆仓库:

    git clone
    https://git-codecommit.<region>.amazonaws.com/v1/repos/discount-ski-tool
  • 踩坑提示

    若Web控制台无法连接仓库,需在EC2实例上安装ssm-agent并配置通信:

    # CentOS系统示例sudo yum install -y amazon-ssm-agentsudo systemctl start amazon-ssm-agent
2. 配置EventBridge事件触发
  • 创建事件规则

    进入EventBridge控制台,选择“创建规则”,规则类型为“事件模式”。

    配置事件源为CodeCommit,事件类型为Push to repository,指定仓库名称和分支(如main)。

    目标选择CodeBuild项目(需提前创建,见下一步)。

  • 踩坑提示

    确保EventBridge规则的ARN与CodeBuild项目权限匹配,避免触发失败。

3. 配置CodeBuild构建项目
  • 创建项目

    进入CodeBuild控制台,点击“创建项目”,输入名称(如build-discount-tool)。

    源选择CodeCommit,指定仓库和分支;环境选择操作系统(如Amazon Linux 2)和运行时(如Java/Node.js)。

    在“构建规范”中上传或编写buildspec.yml文件,示例:

    version: 0.2phases: install: runtime-versions: java: openjdk11 build: commands: - mvn package # 示例:Maven构建 post_build: commands: - aws s3 cp target/app.zip s3://your-bucket-name/ # 上传至S3
  • 踩坑提示

    部署包格式必须为ZIP,CodeDeploy无法识别tar.gz。

    确保CodeBuild角色有s3:PutObject权限。

4. 配置S3存储部署包
  • 创建存储桶

    进入S3控制台,创建存储桶(如your-bucket-name),区域需与CodeDeploy一致。

    在存储桶策略中允许CodeBuild写入:

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "codebuild.amazonaws.com"}, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-bucket-name/*" }]}
5. 配置CodeDeploy自动部署
  • 创建应用与部署组

    进入CodeDeploy控制台,创建应用(如discount-ski-app),选择计算平台为EC2/On-premises。

    创建部署组,指定EC2标签(如Name: production-server)或实例ID。

    部署配置选择CodeDeployDefault.AllAtOnce(一次性部署)。

  • 安装CodeDeploy代理

    在EC2实例上执行以下命令(根据区域调整URL):

    wget
    https://aws-codedeploy-us-west-2.s3.us-west-2.amazonaws.com/latest/installchmod
    +x ./installsudo ./install autosudo systemctl status codedeploy-agent # 检查状态
  • 踩坑提示

    确保EC2实例的安全组允许HTTP/HTTPS流量(代理通信需要)。

    部署配置文件appspec.yml需放在项目根目录,示例:

    version: 0.0os: linuxfiles: - source: /app.zip destination: /tmp/hooks: AfterInstall: - location: scripts/restart_server.sh # 自定义脚本 timeout: 300
三、完整流程验证
  1. 提交代码:git add .git commit -m "Initial commit"git push origin main
  2. 自动触发

    EventBridge捕获提交事件,启动CodeBuild。

    CodeBuild根据buildspec.yml构建并上传ZIP至S3。

    CodeDeploy从S3拉取ZIP,执行appspec.yml中的部署步骤。

  3. 验证结果

    检查EC2实例上的部署日志:

    cat /var/log/aws/codedeploy-agent/codedeploy-agent.log
四、替代方案:使用CodePipeline(可选)

若EventBridge触发不稳定,可改用CodePipeline串联各阶段:

  1. 创建管道,源阶段选择CodeCommit。
  2. 构建阶段选择CodeBuild。
  3. 部署阶段选择CodeDeploy。

总结:通过CodeCommit、EventBridge、CodeBuild、S3和CodeDeploy的协同,可实现AWS环境下的全自动化持续集成。关键点包括:ZIP格式部署包、EC2代理安装、事件权限配置。根据实际需求调整构建脚本和部署策略即可。