STM32_gitea workflow

目录

简介

实现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 runner

act runner 是gitea的包工头。每次触发工作流之后,gitea都会找到act runner,让它把活干了。

这两者的绑定是通过TOKEN来做的

gitea里创建runner

act runner 的docker 创建的时候将docker传递过去

这样runner就做好了

workflow

.gitea/workflows/build.yml

复制代码
name: 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'
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="374b", SYMLINK+="stlink", MODE="0666"
EOF

udevadm control --reload-rules
udevadm trigger

idVendor 0483 和 idProduct 374b 是过滤标识,可以通过lsusb获得。 SYMLINK 指定链接后的名字

复制代码
root@i5-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
root@i5-8600T:/etc/udev/rules.d# ls -la /dev/stlink
lrwxrwxrwx 1 root root 15 Jul 11 23:11 /dev/stlink -> bus/usb/001/014

USB设备也是要再docker中传递的,ACT runner中 编排和workfllow 中都要指定,与/dev_result同理。

ACT Runner 的默认配置

ACT Runner 默认所有volume 传递失效,默认重头拉镜像,很难用,最好自己做一次配置。

在 actrunner 上执行

复制代码
act_runner generate-config > /dev_result/config.yaml

config.yaml 打开,修改如下

这个文件我们是在/dev_result文件夹上做的,是映射的宿主机路径,所以这个文件不会随着docker删除或者关闭而消失。

修改act runner环境变量,指定CONFIG 文件路径,然后重启即可解决上述问题

docker 源问题解决

https://wkdaily.cpolar.top/archives/gc

相关推荐
Industio_触觉智能35 分钟前
把NPU检测直接嵌进采集终端|RK3576 AI采集终端全链路拆解教程-下
嵌入式硬件·ai·硬件架构·npu·ai视觉·rk3576·采集终端
en.en..1 小时前
STM32 GPIO ODR 与 BSRR 寄存器完整对比详解
单片机·嵌入式硬件
HQB20264 小时前
EG1182|屹晶微电子 60V 内置高压管异步降压 DC‑DC
嵌入式硬件·硬件工程
LCG米5 小时前
STM32硬件SPI驱动SSD1306 OLED实测:上电黑屏排查、页寻址模式与取模扫描方向陷阱
stm32·单片机·嵌入式硬件·嵌入式
深圳老胡6 小时前
STM32C5A3ZG 网络调试总结:从启动失败到连续 Ping 稳定
笔记·stm32·单片机·代码规范
qq_401700416 小时前
100 个 IoT 小项目,给 ESP32 入门补上实操
前端·网络·stm32
硅基造物主6 小时前
STM32 从 0 到 1 做智能家居(八):PWM 控制风扇、加热片与 SG90 窗帘
stm32·嵌入式硬件·智能家居·hal库·pwm
简单电磁炮6 小时前
关于adc采集
stm32·单片机
HQB20267 小时前
EG1163 (S)|屹晶微电子 600V 高压同步降压半桥控制器
嵌入式硬件·硬件工程
木由里予7 小时前
UFS 4.1 HID(Host Initiated Defragmentation)功能详解
嵌入式硬件