STM32_gitea workflow
目录简介使用Dockerfile构建docker镜像配置gitea和act runnerworkflow数据传递编译产物USB设备ACT Runner 的默认配置docker 源问题解决简介实现STM32 开发的自动烧录动作每一次git push向私有仓库推送之后仓库会触发act runner 活动act runner 会拉取最新代码启动工具链的docker做编译和烧录。使用Dockerfile构建docker镜像dockerfile用于创建虚拟机镜像这里主要是安装一些软件。做好之后后面自动化的时候就不用每次都临时安装费时费力。这个镜像做好之后每次编译都会再这个镜像中做。# 拉取基础镜像 FROM ubuntu:24.04 # 软件源先设置为HTTP下载ca-certificates解决HTTPS证书问题 RUN sed -i s|https://|http://|g /etc/apt/sources.list.d/ubuntu.sources \ sed -i s|http://archive.ubuntu.com|http://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list.d/ubuntu.sources \ sed -i s|http://security.ubuntu.com|http://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list.d/ubuntu.sources RUN apt-get update \ apt-get install -y ca-certificates # 将软件源恢复为 HTTPS并安装编译工具 RUN sed -i s|http://mirrors.tuna.tsinghua.edu.cn|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list.d/ubuntu.sources RUN apt-get update \ apt-get install -y cmake make git build-essential gcc-arm-none-eabi usbutils\ openocd binutils-arm-none-eabi libnewlib-arm-none-eabi libstdc-arm-none-eabi-newlib # 清空软件包缓存 RUN rm -rf /var/lib/apt/lists/*如果出现了如下两种报错都是正常的# 构建过程没有终端会报如下错误 debconf: delaying package configuration, since apt-utils is not installed man-db 没装 没有影响 update-alternatives: warning: skip creation of /usr/share/man/man1/fakeroot.1.gz...配置gitea和act runneract runner 是gitea的包工头。每次触发工作流之后gitea都会找到act runner让它把活干了。这两者的绑定是通过TOKEN来做的gitea里创建runneract runner 的docker 创建的时候将docker传递过去这样runner就做好了workflow.gitea/workflows/build.ymlname: STM32 Build and Flash on: push: branches: [main, master] workflow_dispatch: jobs: build-and-flash: runs-on: ubuntu-latest container: image: ubuntu-dev volumes: - /dev:/dev:rw - /dev_result:/dev_result:rw options: --privileged steps: - name: Clone run: | rm -rf /dev_result/STM32F4 git clone http://token:${{ secrets.GITEA_TOKEN }}192.168.4.41:3000/wwl/STM32F4.git /dev_result/STM32F4 - name: Debug USB run: | ls -la /dev/stlink ls -la /dev/bus/usb/* lsusb 2/dev/null || echo no lsusb - name: Build and flash run: | cd /dev_result/STM32F4 make clean make -j4 openocd -f interface/stlink.cfg -f target/stm32f0x.cfg \ -c transport select hla_swd \ -c program build/STM32F070.hex verify reset exit数据传递编译产物编译产物位于宿主机路径/dev_result, 这个路径首先要传递给act runner, 编排compose里要做这样一个文件夹映射之后runner 再启动 job container 再传递给 ubuntu-dev这样克隆编译才能用到这个文件夹。USB设备宿主机接STlink做烧录追踪USB的号码是动态变化的为了下一次插拔STlink设备流程还能正常运行需要使用udev绑定udev的工作原理是将符合条件的USB设备做软链接从而得到一个统一的入口。宿主机上做mkdir -p /etc/udev/rules.d cat /etc/udev/rules.d/50-stlink.rules EOF SUBSYSTEMusb, ATTR{idVendor}0483, ATTR{idProduct}374b, SYMLINKstlink, MODE0666 EOF udevadm control --reload-rules udevadm triggeridVendor 0483 和 idProduct 374b 是过滤标识可以通过lsusb获得。 SYMLINK 指定链接后的名字rooti5-8600T:/etc/udev/rules.d# lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 014: ID 0483:374b STMicroelectronics ST-LINK/V2.1 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub rooti5-8600T:/etc/udev/rules.d# ls -la /dev/stlink lrwxrwxrwx 1 root root 15 Jul 11 23:11 /dev/stlink - bus/usb/001/014USB设备也是要再docker中传递的ACT runner中 编排和workfllow 中都要指定与/dev_result同理。ACT Runner 的默认配置ACT Runner 默认所有volume 传递失效默认重头拉镜像很难用最好自己做一次配置。在 actrunner 上执行act_runner generate-config /dev_result/config.yamlconfig.yaml 打开修改如下这个文件我们是在/dev_result文件夹上做的是映射的宿主机路径所以这个文件不会随着docker删除或者关闭而消失。修改act runner环境变量指定CONFIG 文件路径然后重启即可解决上述问题docker 源问题解决https://wkdaily.cpolar.top/archives/gc