如何在GitLab Release中自动添加编译生成的.hex固件文件?
可行方案实现步骤
1. 准备GitLab Runner与IAR编译环境
- 部署Windows类型的GitLab Runner并注册到你的项目,给runner打上专属标签(比如
iar-compiler),方便CI任务调度。 - 在runner所在机器安装IAR Embedded Workbench,确保
iarbuild.exe(IAR命令行编译工具)可直接调用:要么将其路径添加到系统PATH,要么在CI脚本中指定完整路径(例如C:\Program Files (x86)\IAR Systems\Embedded Workbench 9.0\common\bin\iarbuild.exe)。
2. 编写.gitlab-ci.yml配置文件
通过CI/CD流水线实现编译生成.hex和自动上传至Release两个阶段:
阶段1:编译生成.hex文件
利用IAR命令行工具编译项目,同时将.hex文件作为构建产物保存,供后续发布阶段使用:
stages: - build - release build: stage: build tags: - iar-compiler # 指定使用配置好的IAR runner script: # 替换为你的IAR项目文件路径和编译配置(比如Release) - "iarbuild.exe ./your_project_path/Project.ewp -build Release" artifacts: paths: - ./Obj/YourFirmware.hex # 替换为实际的.hex输出路径 expire_in: 1 week # 构建产物过期时间,可按需调整
阶段2:自动创建Release并上传.hex资产
仅当创建Git标签时触发该阶段,通过GitLab官方工具或API完成Release创建与资产上传:
方式一:使用release-cli(推荐)
release-cli是GitLab官方提供的Release管理工具,需确保runner已安装该工具:
release: stage: release tags: - iar-compiler needs: - build # 依赖build阶段完成 only: - tags # 仅当创建标签时触发 script: - | release-cli create --name "Release $CI_COMMIT_TAG" --tag-name $CI_COMMIT_TAG \ --assets-path "./Obj/YourFirmware.hex" \ --description "自动发布的固件版本,包含可烧录的.hex文件"
方式二:使用GitLab API(无需额外工具)
通过curl调用GitLab API完成操作,利用GitLab自动注入的CI_JOB_TOKEN进行身份认证:
release: stage: release tags: - iar-compiler needs: - build only: - tags script: - | # 1. 创建Release curl --request POST --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \ --data "name=Release $CI_COMMIT_TAG&tag_name=$CI_COMMIT_TAG&description=自动发布固件" \ "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases" # 2. 上传.hex文件作为Release资产 curl --request POST --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \ --header "Content-Type: application/octet-stream" \ --data-binary "@./Obj/YourFirmware.hex" \ "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases/$CI_COMMIT_TAG/assets/links?name=YourFirmware.hex"
3. 关键注意事项
- 确认IAR项目配置中,.hex文件的输出路径与CI脚本中指定的路径完全一致。
- 确保runner具备足够权限:可访问GitLab仓库、执行IAR编译命令、读写项目文件。
- 项目CI/CD设置中,需允许作业使用
CI_JOB_TOKEN访问GitLab API(默认已开启)。
内容的提问来源于stack exchange,提问作者NicoCaldo
相关产品推荐
相关产品推荐

