如何在AWS CodeCommit->CodeBuild->CodeDeploy流水线中仅将AngularJS构建生成的dist文件夹内容部署至Amazon S3存储桶(无需Lambda函数)
不用Lambda!在AWS流水线里只部署dist文件夹内容的快捷方法
当然可以!你完全不用写Lambda函数,在现有的CodeCommit->CodeBuild->CodeDeploy流水线里就能轻松实现只把dist文件夹内的内容部署到S3桶,下面是两种最实用的方案:
方案一:直接在CodeBuild中同步dist内容到S3(最简单)
其实你可以跳过CodeDeploy这一步,直接在CodeBuild的构建完成阶段用AWS CLI把dist里的文件同步到S3。这样流程更简洁,也不用额外配置CodeDeploy。
只需要修改你的buildspec.yml,在post_build阶段添加同步命令:
version: 0.2 phases: install: runtime-versions: nodejs: 20 # 根据你的Angular版本选合适的Node.js版本 commands: - npm install # 安装项目依赖 build: commands: - ng build --configuration production # 用生产模式构建,替代ng serve(ng serve是开发服务器用的,产物不适合部署) post_build: commands: # 同步dist下的项目文件夹内容到S3桶,--delete参数会删除桶里不存在的旧文件 - aws s3 sync ./dist/你的项目名称 s3://你的S3桶名 --delete
注意事项:
- 要确保你的CodeBuild服务角色拥有访问目标S3桶的权限(比如
s3:PutObject、s3:DeleteObject等) - 替换
你的项目名称:Angular构建后,dist文件夹里通常会有一个和项目同名的子文件夹,你要指定这个路径;如果你的构建配置是直接把产物放到dist根目录,就改成./dist/
方案二:调整CodeBuild产物+CodeDeploy配置(保留现有流水线结构)
如果你想继续保留CodeDeploy的流程,那可以让CodeBuild只输出dist文件夹内的内容,再让CodeDeploy把这些内容部署到S3。
步骤1:修改CodeBuild的buildspec.yml,指定只打包dist内的内容
version: 0.2 phases: install: runtime-versions: nodejs: 20 commands: - npm install build: commands: - ng build --configuration production artifacts: base-directory: dist/你的项目名称 # 指向dist里的内容目录 files: - '**/*' # 打包该目录下的所有文件和子文件夹
步骤2:配置CodeDeploy部署
在你的CodeDeploy应用(S3类型)的部署组中,确保部署的是CodeBuild输出的这个Artifact。CodeDeploy会直接把Artifact里的所有内容(也就是dist内的文件)上传到S3桶的根目录,不会带dist文件夹本身。
小提示
- 强烈建议用
ng build --configuration production替代ng serve来构建产物:ng serve是启动开发服务器用的,生成的产物没有经过优化,不适合生产部署;而ng build的生产模式会做代码压缩、Tree Shaking等优化,生成适合部署的产物。 - 测试的时候可以先在本地运行
aws s3 sync命令或者打包命令,确认结果符合预期后再放到流水线里,避免踩坑。
内容的提问来源于stack exchange,提问作者Harsha W
相关产品推荐
相关产品推荐

