使用Godot CI的GitHub Actions在ubuntu-latest上遇aws: not found错误
解决GitHub Actions中Godot CI容器下AWS CLI未找到的问题
问题原因
你遇到的aws: not found错误,是因为当前使用的barichello/godot-ci:4.3容器镜像并未预装AWS CLI。虽然默认的ubuntu-latest托管运行器自带AWS CLI,但一旦指定了容器,整个job的执行环境就切换到容器内部,无法直接使用宿主环境的工具。
解决方案
方案一:在容器内安装AWS CLI
在配置AWS凭证的步骤之前,添加安装AWS CLI的命令,直接在Godot CI容器内完成安装:
jobs: export-web: name: Web Export runs-on: ubuntu-latest container: image: barichello/godot-ci:4.3 steps: # ... 保留原有Checkout、Setup、Web Build、Upload Artifact步骤 ... - name: Install AWS CLI run: | apt-get update && apt-get install -y awscli - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 # ... 保留原有Publish到S3、CloudFront失效步骤 ...
方案二:拆分构建与部署Job(推荐)
将构建Godot项目和部署到AWS的步骤拆分为两个独立job:
- 第一个job使用Godot CI容器完成Web构建,并上传产物为artifact
- 第二个job使用默认
ubuntu-latest环境(自带AWS CLI),下载artifact后执行部署操作
修改后的Workflow配置如下:
jobs: export-web: name: Web Export runs-on: ubuntu-latest container: image: barichello/godot-ci:4.3 steps: - name: Checkout uses: actions/checkout@v4 with: lfs: true - name: Setup run: | mkdir -v -p ~/.local/share/godot/export_templates/ mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable - name: Web Build run: | mkdir -v -p build/web EXPORT_DIR="$(readlink -f build)" cd $PROJECT_PATH godot --headless --verbose --export-release "Web" "$EXPORT_DIR/web/index.html" - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: web path: build/web deploy-to-aws: name: Deploy to AWS runs-on: ubuntu-latest needs: export-web # 依赖构建job完成 steps: - name: Download Artifact uses: actions/download-artifact@v4 with: name: web path: build/web - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Publish to AWS S3 run: aws s3 cp --recursive ./build/web/ s3://${{ secrets.AWS_DISTRIBUTION_S3_BUCKET }}/ - name: Invalidate AWS CloudFront distribution run: aws cloudfront create-invalidation --distribution-id ${{ secrets.AWS_CLOUDFRONT_DISTRIBUTION_ID }} --paths "/*"
方案对比
- 方案一:操作简单,无需调整Job结构,但每次运行都要重新安装AWS CLI,会增加少量执行时间
- 方案二:实现了构建与部署环境的分离,避免工具冲突,后续维护更清晰,是更推荐的实践方式
内容的提问来源于stack exchange,提问作者Nick Charney Kaye
相关产品推荐
相关产品推荐

