CircleCI自动部署至Amazon S3失败,求排查方案
问题根源:你用了CircleCI 2.0已废弃的配置字段
你的部署步骤完全没执行的核心原因是:CircleCI 2.0已经彻底弃用了顶级的deployment字段,这个字段是CircleCI 1.0的语法,所以你写的这部分配置根本不会被CI系统识别,自然不会触发部署流程。
接下来给你两种修复方案,按需选择:
方案一:把构建和部署合并成一个Job(适合简单场景)
直接把部署步骤加到build Job的末尾,同时用workflows来控制触发分支:
version: 2 jobs: build-and-deploy: docker: - image: circleci/node:7.10 steps: - checkout - run: npm install - run: npm run build # 部署到S3,注意修正桶地址 - run: aws s3 sync build/ s3://www.typing-coacher.net --delete workflows: version: 2 build-deploy: jobs: - build-and-deploy: filters: branches: only: circle-config-test # 仅在目标分支触发
方案二:拆分构建和部署为独立Jobs(更灵活)
如果需要更精细的控制(比如手动触发部署、构建成功后才部署),可以把流程拆成两个Job,用工作区传递构建产物:
version: 2 jobs: build: docker: - image: circleci/node:7.10 steps: - checkout - run: npm install - run: npm run build # 把build目录保存到工作区,供部署Job使用 - persist_to_workspace: root: . paths: - build deploy: # 用预装AWS CLI的镜像更省心,避免手动安装 docker: - image: circleci/aws-cli steps: # 加载之前保存的build目录 - attach_workspace: at: . - run: aws s3 sync build/ s3://www.typing-coacher.net --delete workflows: version: 2 build-then-deploy: jobs: - build: filters: branches: only: circle-config-test - deploy: requires: - build # 只有构建成功才会执行部署
几个必须注意的细节
- 修正S3桶地址:你之前的命令里写了完整的网站URL,这是错误的!S3同步命令只需要桶名,比如
s3://www.typing-coacher.net(你的网站URL对应的桶名就是www.typing-coacher.net)。 - 配置AWS权限:在CircleCI项目的「Project Settings > Environment Variables」中添加
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,这两个密钥需要拥有S3桶的读写权限(建议给最小权限:允许s3:PutObject、s3:DeleteObject、s3:ListBucket)。 - 确保AWS CLI可用:如果用
circleci/node:7.10镜像,可能需要手动安装AWS CLI,加一步run: sudo apt-get update && sudo apt-get install -y awscli;或者直接用circleci/aws-cli镜像(方案二里用的就是这个),省去安装步骤。
调整好配置后,重新触发构建,部署步骤就会正常出现在控制台里了。
内容的提问来源于stack exchange,提问作者LiranC
相关产品推荐
相关产品推荐

