Github Actions报错:'awscli'无安装候选,切换Ubuntu版本仍未解决
问题排查与解决方案
核心原因
- 依赖的第三方Action版本过旧:你用的
chrislennon/action-aws-cli@v1.1是2019年的老版本,内部通过apt安装AWS CLI v1,但这个逻辑在Ubuntu 22.04上可能因为源更新不及时、依赖缺失等问题失效。 - 配置语法错误:你的
AWS_STACK_NAME和AWS_REGION用了{{secrets.XXX}}的嵌套写法,这不符合GitHub Actions的语法规范,正确写法是${{ secrets.XXX }}——虽然这不是直接导致awscli安装失败的原因,但会引发后续部署步骤的问题。 - 老旧SAM Action的潜在依赖问题:
r0zar/sam-deploy-action@v1.4同样是缺乏维护的版本,可能也会尝试安装AWS CLI,进一步加剧冲突。
可行解决方案
方案1:改用AWS官方Action(推荐)
官方Action维护及时,兼容性更好,直接替换掉老旧的第三方工具:
deploy: runs-on: ubuntu-22.04 needs: [build-and-push] steps: - uses: actions/checkout@v4 # 升级到最新版checkout,避免兼容性问题 - name: 配置AWS凭证 uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_REGION }} - name: 安装AWS CLI v2 uses: aws-actions/aws-cli@v2 - run: aws s3 ls - name: SAM部署 uses: aws-actions/aws-sam-cli@v2 with: command: deploy template-file: template.yml stack-name: ${{ secrets.AWS_STACK_NAME }} s3-bucket: terraform-bucket region: ${{ secrets.AWS_REGION }}
方案2:修复旧Action的安装逻辑(临时过渡用)
如果必须保留原有Action,先强制更新apt源再执行安装:
deploy: runs-on: ubuntu-22.04 needs: [build-and-push] steps: - uses: actions/checkout@v1 - name: 更新apt源并安装依赖 run: sudo apt update && sudo apt install -y apt-transport-https ca-certificates - uses: chrislennon/action-aws-cli@v1.1 - run: aws s3 ls env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - uses: r0zar/sam-deploy-action@v1.4 env: TEMPLATE: 'template.yml' AWS_STACK_NAME: ${{ secrets.AWS_STACK_NAME }} # 修正语法错误 AWS_REGION: ${{ secrets.AWS_REGION }} # 修正语法错误 AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_DEPLOY_BUCKET: 'terraform-bucket'
方案3:手动安装AWS CLI v2
完全绕开第三方Action,手动安装最新版AWS CLI:
deploy: runs-on: ubuntu-22.04 needs: [build-and-push] steps: - uses: actions/checkout@v4 - name: 手动安装AWS CLI v2 run: | curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install - run: aws s3 ls env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} - uses: r0zar/sam-deploy-action@v1.4 env: TEMPLATE: 'template.yml' AWS_STACK_NAME: ${{ secrets.AWS_STACK_NAME }} AWS_REGION: ${{ secrets.AWS_REGION }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_DEPLOY_BUCKET: 'terraform-bucket'
重要提醒
- 尽量避免使用停止维护的第三方Action,官方工具在兼容性和安全性上更有保障。
- 所有GitHub Secrets的引用必须严格遵循
${{ secrets.KEY_NAME }}的语法,错误写法会导致变量无法正常解析。 - AWS CLI v2相比v1支持更多功能,且是官方主推版本,建议优先选用。
内容的提问来源于stack exchange,提问作者Bhaskar Dabhi
相关产品推荐
相关产品推荐

