借助Azure DevOps CI/CD实现树莓派Python应用自动部署
基于Azure DevOps实现树莓派Python应用的自动化OTA更新流程
一、CI阶段:自动化构建适配树莓派的可执行文件
1. 配置Pipeline触发规则
在Azure DevOps Pipeline中设置触发条件,比如代码推送到main分支时自动启动构建流程。
2. 选择构建环境
由于树莓派是ARM架构,直接用Azure官方x86代理构建会生成不兼容的可执行文件,推荐两种方案:
- 方案1:使用自托管树莓派代理
在树莓派上安装Azure DevOps自托管代理,直接在目标架构环境中构建,避免交叉编译问题。 - 方案2:使用ARM Docker镜像构建
在Pipeline中使用arm32v7/python镜像(适配树莓派3/4的32位系统,若用64位则用arm64v8/python),通过容器完成构建。
3. 构建步骤示例(YAML片段)
trigger: branches: include: - main pool: # 方案1:用自托管树莓派代理的名称 # name: 'RaspberryPiAgentPool' # 方案2:用Azure托管代理+Docker镜像 vmImage: 'ubuntu-latest' container: arm32v7/python:3.9-slim steps: - script: | pip install --upgrade pip pip install -r requirements.txt pip install pyinstaller displayName: '安装依赖' - script: | pyinstaller --onefile --name your_app your_script.py displayName: '用PyInstaller构建可执行文件' - publish: $(System.DefaultWorkingDirectory)/dist artifact: RaspberryPiApp displayName: '发布构建产物'
二、CD阶段:自动化部署到树莓派并重启应用
1. 配置SSH服务连接
在Azure DevOps的「项目设置」→「服务连接」中添加SSH连接,填入树莓派的IP地址、SSH用户名、密码或密钥,确保Pipeline能远程访问树莓派。
2. 部署步骤示例(YAML片段)
stages: - stage: Deploy dependsOn: Build jobs: - job: DeployToPi pool: vmImage: 'ubuntu-latest' steps: - download: current artifact: RaspberryPiApp displayName: '下载构建产物' - task: CopyFilesOverSSH@0 inputs: sshEndpoint: '你的树莓派SSH服务连接名称' sourceFolder: '$(Pipeline.Workspace)/RaspberryPiApp' contents: 'your_app' targetFolder: '/tmp/' displayName: '上传可执行文件到树莓派临时目录' - task: SSH@0 inputs: sshEndpoint: '你的树莓派SSH服务连接名称' runOptions: 'commands' commands: | # 停止运行中的应用(假设用systemd管理) sudo systemctl stop your_app.service # 替换目标路径的可执行文件 sudo cp /tmp/your_app /usr/local/bin/ # 赋予执行权限 sudo chmod +x /usr/local/bin/your_app # 重启应用 sudo systemctl start your_app.service # 验证应用状态 sudo systemctl status your_app.service --no-pager displayName: '部署并重启应用'
关键注意事项
- 权限配置:确保树莓派的SSH用户拥有sudo权限,且配置免密sudo(编辑
/etc/sudoers,添加your_user ALL=(ALL) NOPASSWD: /bin/systemctl, /bin/cp),避免部署时需要输入密码。 - 应用管理:建议用systemd托管应用,创建
/etc/systemd/system/your_app.service配置文件,实现可靠的启停、重启和开机自启。 - 网络可达性:确保Azure DevOps代理(托管或自托管)能访问树莓派的IP,内网环境可通过VPN或Azure混合连接打通网络。
- 版本验证:可在PyInstaller构建时注入版本信息(比如
--version-file参数),部署后通过your_app --version验证更新是否生效。
内容的提问来源于stack exchange,提问作者kebberpee
相关产品推荐
相关产品推荐

