推送到 ECR 的 buildspec.yml 抛出此错误“命令未成功退出 $(aws ecr get-login --no-include-email --region us-east-1)”

问题描述

我正在学习代码管道以将使用 CodeBuild 的构建推送到 ECR。下面是我的 buildspec.yml 文件和 Codebuild 日志中的错误。任何人都可以阐明我做错了什么吗?提前致谢。

buildspec.yml

版本:0.2

阶段:

预构建:

commands:
  - echo Logging in to Amazon ECR.....
  - aws --version
  - $(aws ecr get-login --no-include-email --region us-east-1)
  - REPOSITORY_URI=989066xxxxxx.dkr.ecr.us-east-1.amazonaws.com/ecs-cicd-Nginx
  - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)

构建:

commands:
  - echo Build started on `date`
  - echo Building the Docker image...
  - docker build -t $REPOSITORY_URI:$IMAGE_TAG .

post_build:

commands:
  - echo Build completed on `date`
  - echo Pushing the Docker images...
  - docker push $REPOSITORY_URI:$IMAGE_TAG
  - echo Writing image deFinitions file...
  - printf '[{"name":"ecs-cicd-Nginx","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedeFinitions.json

文物: 文件:imagedeFinitions.json

错误日志: [容器] 2021/07/13 11:13:22 运行命令 aws --version aws-cli/2.1.38 Python/3.8.8 Linux/4.14.225-121.362.amzn1.x86_64 exec-env/AWS_ECS_EC2 exe/x86_64.ubuntu.20 提示/关闭

[Container] 2021/07/13 11:13:26 运行命令 $(aws ecr get-login --no-include-email --region us-east-1)

用法:aws [选项] [ ...] [参数] 要查看帮助文本,您可以运行:

aws 帮助 aws 帮助 aws 帮助

aws:错误:参数操作:无效的选择,有效的选择是:

批量检查层可用性|批量删除图片
批量获取图像|完整层上传
创建存储库 |删除生命周期策略
删除注册表策略 |删除存储库
删除存储库策略 |描述图像扫描结果
描述图像 |描述注册
描述存储库 |获取授权令牌
get-download-url-for-layer |获取生命周期策略
获取生命周期策略预览 |获取注册表策略
获取存储库策略 |启动层上传
列表图像|资源列表标签
放图像 |放置图像扫描配置
put-image-tag-mutability | put-lifecycle-policy
put-registry-policy |放置复制配置
设置存储库策略 |开始图像扫描
开始生命周期策略预览 |标签资源
取消标记资源 |上传层部分
获取登录密码 |等待
帮助

[Container] 2021/07/13 11:13:26 命令没有成功退出 $(aws ecr get-login --no-include-email --region us-east-1) 退出状态 252 [容器] 2021/07/13 11:13:26 阶段完成:PRE_BUILD 状态:Failed [Container] 2021/07/13 11:13:26 阶段上下文状态代码:COMMAND_EXECUTION_ERROR 消息:执行命令时出错:$(aws ecr get-login --no-include-email --region us-east-1)。原因:退出状态 252

解决方法

CLI documentation 开始,get-login 在 CLI 的 2.x 版中已弃用。它在最新版本中不存在。

改用 get-login-password

以下是来自 CodeBuild documentation 的示例: aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com