Codestar流水线执行成功但EC2实例无部署文件求助
排查AWS Codestar流水线成功但EC2无部署文件的问题
刚接触AWS Codestar踩这种“流水线全绿但实例没东西”的坑真的太闹心了,我之前也碰到过类似情况,给你梳理几个最可能的原因和实操排查方向:
1. 构建/部署配置文件的路径或规则错了
Codestar的部署逻辑依赖buildspec.yml和appspec.yml这两个核心配置,很容易在这里踩坑:
- 检查
buildspec.yml的artifacts部分:你有没有把需要部署的文件都包含进来?比如如果你的应用是构建后生成dist目录,那要确保artifacts指定了从dist目录取文件,而不是根目录(根目录可能包含node_modules等不需要的文件,甚至可能漏了构建产物)。举个正确的例子:artifacts: files: - '**/*' base-directory: 'dist' - 检查
appspec.yml的文件复制规则:确认source和destination路径是否匹配。比如你要把部署包的所有文件放到EC2的/home/ec2-user/my-app目录,那配置应该是:
如果路径写错了,流水线会显示成功,但文件会被复制到错误的位置,你自然找不到。files: - source: / destination: /home/ec2-user/my-app
2. EC2上的CodeDeploy Agent出问题了
流水线显示成功不代表EC2上的部署代理真的接收到了指令,可能Agent没运行或者报错了:
- 先在EC2上用SSH登录,运行
sudo service codedeploy-agent status看状态,如果显示not running,就重启它:sudo service codedeploy-agent restart。 - 查看Agent的日志:
tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log,找最近的部署记录,有没有类似“Failed to download artifact from S3”“Permission denied”这类报错——这些都是关键线索。
3. IAM权限不足(最容易被忽略的点)
流水线和EC2实例的IAM角色权限不够,会导致部署包无法从S3传输到EC2:
- CodePipeline角色:要确保它有向部署包所在S3桶上传文件的权限(
s3:PutObject)。 - EC2实例角色:要允许它从同一个S3桶下载文件(
s3:GetObject)。
很多时候新手会用默认角色,但默认角色的权限可能没覆盖到你的S3桶,需要手动添加对应的桶权限策略。
4. 构建阶段没生成有效产物
虽然本地npm start正常,但流水线的构建阶段可能没正确执行依赖安装或构建命令:
- 检查
buildspec.yml的build部分,有没有包含npm install或者npm run build?比如:
如果少了这些命令,构建出来的产物可能是空的或者不完整,流水线虽然成功,但没东西可部署。build: commands: - npm install - npm run build
5. 目标目录权限或冲突问题
EC2上的应用目录可能存在权限问题,导致自动部署时无法写入文件,但手动上传时你用了root或有权限的用户:
- 检查目标目录的权限:
ls -ld /home/ec2-user/my-app,看看部署用户(通常是codedeploy用户)有没有读写权限。 - 查看CodeDeploy的部署日志:在
/opt/codedeploy-agent/deployment-root/下面找到对应部署ID的日志文件,里面会详细记录文件复制的过程,有没有报错。
按照这个顺序排查,大概率能找到问题所在——我当时就是因为buildspec.yml里漏了指定base-directory,导致构建产物没被正确打包,流水线绿了但EC2上啥都没有。
内容的提问来源于stack exchange,提问作者HelloGaro
相关产品推荐
相关产品推荐

