GitLab CI/CD测试阶段安装aws-cli失败,求替代解决方案
GitLab CI/CD安装aws-cli失败问题解决
问题背景
我们在GitLab CI/CD的测试阶段对AWS Serverless Lambda进行测试,此前运行正常,但一周前开始出现异常。测试阶段的CI配置如下:
"Test": image: docker:latest services: - name: amazon/dynamodb-local alias: dynamodb - name: localstack/localstack alias: localstack stage: test only: - merge_requests - main variables: <<: *test_variables coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/ dependencies: - "Build" before_script: - apk --update add nodejs npm - apk add --no-cache aws-cli script: - node --version - npm --version - export AWS_REGION=$AWS_DEFAULT_REGION - export AWS_ACCESS_KEY_ID=X - export AWS_SECRET_ACCESS_KEY=X - export DYNAMODB_LOCAL_ADDRESS=dynamodb - export S3_LOCAL_ADDRESS=localstack - npm install - npm run test-ci artifacts: when: always reports: junit: - serverless/junit/jest-junit.xml coverage_report: coverage_format: cobertura path: serverless/coverage/cobertura-coverage.xml
错误日志
流水线执行时触发以下错误:
$ apk add --no-cache aws-cli fetch https://dl-cdn.alpinelinux.org/alpine/v3.20/main/x86_64/APKINDEX.tar.gz fetch https://dl-cdn.alpinelinux.org/alpine/v3.20/community/x86_64/APKINDEX.tar.gz ERROR: unable to select packages: aws-cli (no such package): required by: world[aws-cli]
解决方案
除了固定Alpine版本(比如使用docker:24.0.6-alpine3.19这类带具体Alpine版本的镜像),还有以下几种可行方案,无需等待Alpine推出新版本(aws-cli在Alpine v3.20中被移除是官方有意调整,后续大概率不会回归仓库):
使用pip安装aws-cli
Alpine v3.20仓库不再提供aws-cli二进制包,但可通过Python的pip安装:
修改before_script中的安装命令:apk --update add nodejs npm python3 py3-pip pip install aws-cli此方式安装速度稍慢,但能获取最新版aws-cli。
切换到预装aws-cli的基础镜像
直接使用自带aws-cli的镜像,比如amazon/aws-cli,调整job的image配置:image: amazon/aws-cli:latest services: - name: amazon/dynamodb-local alias: dynamodb - name: localstack/localstack alias: localstack before_script: - apk --update add nodejs npm # 无需再安装aws-cli,镜像已预装若需同时使用docker功能,可在该镜像中额外安装docker-cli,或使用包含两者的自定义镜像。
直接下载aws-cli二进制压缩包
从AWS官方获取预编译的二进制包安装:
在before_script中添加:apk --update add nodejs npm curl unzip curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip ./aws/install此方式不受Alpine仓库限制,可获取官方最新版本。
内容的提问来源于stack exchange,提问作者robynico
相关产品推荐
相关产品推荐

