Gitlab CI/CD流水线执行AWS ECR登录时报SyntaxError错误求助
问题根因
你遇到的语法错误核心原因如下:
- CI使用的
ubuntu:16.04基础镜像自带的Python3版本为3.5,而f-string语法是Python 3.6版本才新增的特性 - 你的CI脚本中执行
pip3 install awscli没有固定安装版本,默认会拉取最新版awscli及依赖的botocore组件。2021年后发布的awscli、botocore版本已经完全停止对Python3.5的支持,新版本代码中大量使用f-string语法,在Python3.5环境下运行就会直接触发语法错误。之前一年运行正常是因为当时安装的还是兼容Python3.5的旧版本,近期awscli新版本发布后不再兼容才突然出现问题。 - 后续你修改登录命令后遇到的
Cannot perform an interactive login from a non TTY device属于附带报错:本质是aws命令执行失败没有输出密码,docker login收不到标准输入的密码才触发交互提示,和登录命令本身无关。
解决方案
方案1:临时快速修复
无需修改基础镜像,直接把所有CI阶段中的pip3 install awscli命令改为安装兼容Python3.5的最高版本即可:
# 把原有pip3 install awscli、pip3 install rsa合并成下面的命令 pip3 install awscli==1.19.112 botocore==1.20.112 rsa
修改后所有aws相关命令都可正常运行,你更换的aws ecr get-login-password登录命令也可以正常使用,不需要切回旧命令。
方案2:长期优化(推荐)
Ubuntu 16.04已经在2021年停止官方维护,继续使用存在较高安全风险,建议把所有CI阶段的基础镜像从ubuntu:16.04更换为更高版本的稳定镜像,比如ubuntu:20.04、ubuntu:22.04,这类镜像自带Python3.8+版本,兼容最新版awscli,不需要修改其他安装逻辑即可正常运行。
内容的提问来源于stack exchange,提问作者Agilulfo
相关产品推荐
相关产品推荐

