如何更新GitLab CI配置以使用最新Docker与AWS CLI v2版本
问题根因
- docker:20.10.9 官方镜像基于 Alpine 3.14 版本,默认使用 musl 作为系统 C 库,而 AWS CLI v2 官方提供的预编译二进制包基于 glibc 编译,直接部署会报依赖缺失错误
- AWS CLI v2 已经正式停止支持通过 pip 安装,原有
pip3 install awscli命令只能安装 AWS CLI v1 版本,且新版本依赖与 Alpine 3.14 自带的 Python 版本存在兼容性问题,会直接报错 - 原有
aws ecr get-login命令在 AWS CLI v2 中已被废弃,需要替换为新的登录命令
可行解决方案
方案1:在 docker:20.10.9 镜像内适配安装 AWS CLI v2(推荐,改动最小)
直接在原有配置基础上修改 before_script 步骤,提前安装 glibc 兼容层后再部署 AWS CLI v2,完整配置如下:
image: docker:20.10.9 services: - docker:20.10.9-dind variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" AWS_REGION: us-east-1 # 替换为你自己的ECR仓库地址 ECR_REGISTRY: <你的AWS账户ID>.dkr.ecr.us-east-1.amazonaws.com stages: - Build - Push before_script: # 安装基础依赖和glibc兼容层 - apk add --no-cache curl unzip glibc-compat # 下载并安装AWS CLI v2 - curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" - unzip -q awscliv2.zip - ./aws/install -i /usr/local/aws-cli -b /usr/local/bin # 验证安装 - aws --version - docker version # 加载本地镜像 - docker load --input data/image.tar # ECR登录(适配AWS CLI v2的新命令) - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $ECR_REGISTRY
注意事项:
- 需提前在GitLab项目变量中配置好
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,权限需包含ECR推送权限 - 如果你使用的是ARM架构的GitLab Runner,需要将AWS CLI下载链接替换为ARM版本的对应链接
方案2:使用预装AWS CLI v2的镜像+Docker客户端
如果你不想每次构建都重复下载安装AWS CLI,可以将Job基础镜像替换为AWS官方的AWS CLI v2镜像,再额外安装Docker客户端即可:
image: amazon/aws-cli:latest services: - docker:20.10.9-dind variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" AWS_REGION: us-east-1 ECR_REGISTRY: <你的AWS账户ID>.dkr.ecr.us-east-1.amazonaws.com stages: - Build - Push before_script: # 安装Docker客户端 - yum install -y docker # 验证安装 - aws --version - docker version # 加载本地镜像 - docker load --input data/image.tar # ECR登录 - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $ECR_REGISTRY
该方案的优势是安装Docker客户端的速度更快,且AWS CLI v2是官方预装好的,不会出现兼容性问题。
内容的提问来源于stack exchange,提问作者bruvio
相关产品推荐
相关产品推荐

