You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CircleCI将IoT固件制品上传至AWS S3存储桶?

实现CircleCI构建产物上传到AWS S3的修改方案

准备工作

  • 在CircleCI项目的「环境变量」中添加以下变量:
    • AWS_ACCESS_KEY_ID:拥有S3写入权限的AWS用户访问密钥ID
    • AWS_SECRET_ACCESS_KEY:对应密钥的密码
    • S3_BUCKET:目标S3存储桶名称(例如my-iot-firmwares)
  • 确保AWS用户权限配置包含目标S3桶的PutObject操作权限

修改后的完整CircleCI配置

version: 2.1
orbs:
  python: circleci/python@1.4.0
  aws-s3: circleci/aws-s3@3.1.1 # 引入官方AWS S3 orb,简化上传操作

jobs:
  build:
    executor: python/default
    steps:
      - checkout # 拉取源码到工作目录
      - run:
          name: Install PlatformIO
          command: pip install --upgrade platformio
      - run:
          name: Compile Project
          command: pio run
      - run:
          name: 确认固件文件存在
          command: |
            FIRMWARE_PATH="./.pio/build/esp32dev/firmware.bin"
            if [ ! -f "$FIRMWARE_PATH" ]; then
              echo "错误:固件文件 $FIRMWARE_PATH 不存在"
              exit 1
            fi
            echo "固件文件路径:$FIRMWARE_PATH"
      - aws-s3/cp: # 使用orb命令上传单个文件到S3
          from: ./.pio/build/esp32dev/firmware.bin
          to: "s3://${S3_BUCKET}/firmwares/esp32dev-$(git rev-parse --short HEAD).bin" # 用Git短哈希命名,避免版本覆盖
          arguments: |
            --acl public-read # 可选:如需公开访问则保留,否则删除此参数
      - store_artifacts: # 保留CircleCI内置制品存储,方便控制台直接下载
          path: ./.pio/build/esp32dev/firmware.bin
          destination: esp32dev-firmware.bin

workflows:
  main:
    jobs:
      - build

关键修改说明

  1. 引入AWS S3官方Orb:circleci/aws-s3@3.1.1封装了AWS CLI的上传逻辑,无需手动安装配置AWS CLI
  2. 替换Dummy制品步骤:移除生成假文件的操作,新增固件文件存在性校验,避免上传空文件或错误路径
  3. S3上传逻辑:
    • 使用aws-s3/cp上传单个固件文件,通过Git短哈希作为文件名后缀,确保每个构建版本的文件唯一
    • 可选的--acl public-read参数用于设置文件公开访问权限,根据实际需求选择保留或删除
  4. 保留CircleCI制品存储:同时将固件文件存入CircleCI自带的制品库,方便构建失败排查或快速下载测试

内容的提问来源于stack exchange,提问作者enomis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:55:26