官方amazon/aws-cli镜像在GitLab流水线中无法执行script命令问题
问题根因
amazon/aws-cli官方镜像默认将入口点(ENTRYPOINT)设置为aws命令:
- 本地直接执行
docker run -it amazon/aws-cli:2.2.40 s3时,等价于实际运行aws s3,所以运行正常 - 如果本地执行命令时加了
aws前缀,就会变成aws aws s3,触发你看到的无效命令报错
而GitLab CI执行作业时默认会重置镜像的ENTRYPOINT为/bin/sh,不会复用镜像默认配置,导致两种写法都匹配不到正确的执行逻辑,不属于转义问题。
解决方案
有两种通用修复方式,二选一即可:
方案1(更推荐,符合常规使用习惯)
显式重置镜像入口点为空,脚本内使用完整aws命令:
deploy_front: image: name: amazon/aws-cli:2.2.40 entrypoint: [""] variables: AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION stage: publish script: - aws s3 sync ./front/build s3://some-bucket-name
方案2
保留镜像默认ENTRYPOINT为aws,脚本内只传s3相关参数:
deploy_front: image: name: amazon/aws-cli:2.2.40 entrypoint: ["aws"] variables: AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION stage: publish script: - s3 sync ./front/build s3://some-bucket-name
内容的提问来源于stack exchange,提问作者zar3bski
相关产品推荐
相关产品推荐

