如何修复 AWS 代码构建COMMAND_EXECUTION_ERROR退出状态 255.



我正在配置 CICD piepline usng aws 服务代码构建堆堆线等,以更新我的 ecs fargate 集群中的部署网络,在我的 buildspec.yml 文件中,aws ecs cli 命令无法抛出"COMMAND_EXECUTION_ERROR:执行命令时出错:aws ecs update-service --services xxxxxx。原因:退出状态 255"

我尝试使用"AmazonECS_FullAccess"策略向代码构建角色提供权限。

post_build:  
commands:  
- echo Build completed on `date`  
- echo Pushing the Docker images...  
- docker push $REPOSITORY_URI:latest  
- docker push $REPOSITORY_URI:$IMAGE_TAG  
- echo Writing image definitions file...  
- printf '[{"name":"xxxxxxx","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json  
- cat imagedefinitions.json 
- echo Updating ECSfargate service ...  
- aws ecs describe-services --services xxxxxxxxxxxxxxxxx 
- aws ecs update-service --service xxxxxxxxxxxxxxxxx --desired-count 2 --no-force-new-deployment  

附加AmazonEC2ContainerRegistryPowerUser策略为我解决了这个问题。

错误代码 255 表示:

255 -- 命令失败。CLI 或向其发出请求的服务引发错误。

https://docs.aws.amazon.com/cli/latest/topic/return-codes.html

正如您提到的,您已经提供了对 CB 角色的完全 ECS 访问权限,接下来您可以检查命令失败的原因:它是在 ecs 描述还是 ecs 更新服务上失败?因为如果 Fargate 服务没有稳定下来,则会导致错误 255。

我建议:

1(只需离开ecs描述命令,看看是否有效。

2( 如果 (1( 成功,则执行 ecs 更新服务并在 AWS ECS 控制台和/或 CW 日志组中监控该服务(如果您的 Fargate Taskdef 具有日志组条目(。

需要授予管道的权限GetAuthorizationToken

ecr:*

而不是

ecr:repository/<you_repo>

因为

aws ecr get-login-password --region <aws_region>

执行于

<account_id>.dkr.ecr.<aws_region>.amazonaws.com 

而不是反对

<account_id>.dkr.ecr.<aws_region>.amazonaws.com/repository/<your_repo>

我遇到了与您相同的问题,我的解决方法是:尝试转到CodeBuild,然后转到其IAM角色。AmazonEC2ContainerRegistryFullAccess 角色,现在单击该代码构建的"编辑"并选择"环境",然后单击允许 AWS CodeBuild 修改此服务角色,以便可以将其用于此构建项目。现在再试一次。

在 CodeBuild 项目中使用 PrivilegedMode 模式。在 docker 容器内构建 docker 映像时,需要该模式。

干杯

相关内容

  • 没有找到相关文章

最新更新