2021-11-20 21:51:40
AWS持续集成实战:从CodeCommit到CodeDeploy的完整搭建指南以下为基于AWS服务的持续集成(CI)流程搭建步骤,涵盖CodeCommit、EventBridge、CodeBuild、S3和CodeDeploy的协同配置,结合实战踩坑经验优化流程。
一、核心组件与交互逻辑
进入AWS CodeCommit控制台,点击“创建仓库”,输入名称(如discount-ski-tool)。
本地通过Git克隆仓库:
git clone若Web控制台无法连接仓库,需在EC2实例上安装ssm-agent并配置通信:
# CentOS系统示例sudo yum install -y amazon-ssm-agentsudo systemctl start amazon-ssm-agent进入EventBridge控制台,选择“创建规则”,规则类型为“事件模式”。
配置事件源为CodeCommit,事件类型为Push to repository,指定仓库名称和分支(如main)。
目标选择CodeBuild项目(需提前创建,见下一步)。
确保EventBridge规则的ARN与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权限。
进入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/*" }]}进入CodeDeploy控制台,创建应用(如discount-ski-app),选择计算平台为EC2/On-premises。
创建部署组,指定EC2标签(如Name: production-server)或实例ID。
部署配置选择CodeDeployDefault.AllAtOnce(一次性部署)。
在EC2实例上执行以下命令(根据区域调整URL):
wget确保EC2实例的安全组允许HTTP/HTTPS流量(代理通信需要)。
部署配置文件appspec.yml需放在项目根目录,示例:
version: 0.0os: linuxfiles: - source: /app.zip destination: /tmp/hooks: AfterInstall: - location: scripts/restart_server.sh # 自定义脚本 timeout: 300EventBridge捕获提交事件,启动CodeBuild。
CodeBuild根据buildspec.yml构建并上传ZIP至S3。
CodeDeploy从S3拉取ZIP,执行appspec.yml中的部署步骤。
检查EC2实例上的部署日志:
cat /var/log/aws/codedeploy-agent/codedeploy-agent.log若EventBridge触发不稳定,可改用CodePipeline串联各阶段:
总结:通过CodeCommit、EventBridge、CodeBuild、S3和CodeDeploy的协同,可实现AWS环境下的全自动化持续集成。关键点包括:ZIP格式部署包、EC2代理安装、事件权限配置。根据实际需求调整构建脚本和部署策略即可。