当前位置: 首页 > news >正文

2024最新 Jenkins + Docker实战教程(九)- Jenkins实现嵌入式系统的自动化流程

在这里插入图片描述

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

Jenkins实现嵌入式系统的自动化流程

  • 前言
  • 整体思路
  • 配置准备
  • ❶ Jenkins插件配置
  • ❷ 配置交叉编译工具链
  • 编写自动化流水线
  • 硬件部署和测试
    • 1. 部署固件
    • 2. 自动化测试
    • 最佳实践
  • 总结

前言

在嵌入式开发中,自动化构建、测试和部署流程可以大大提高开发效率和产品质量。Jenkins作为强大的CI/CD工具,可以帮助嵌入式开发团队实现这一目标。本文将详细介绍如何通过Jenkins实现嵌入式系统的自动化流程,包括代码构建、单元测试、集成测试、固件打包以及部署。

整体思路

一个典型的嵌入式自动化流程包括以下几个步骤:
在这里插入图片描述

  • 代码拉取与构建:从版本控制系统(如Git)拉取代码,配置编译环境并编译生成固件。
  • 单元测试:使用模拟器或真实硬件运行单元测试,确保基础功能的正确性。
  • 集成测试:将多个模块集成在一起,在硬件或仿真环境中进行测试。
  • 固件打包:将生成的固件打包,并根据需要生成校验和或其他配置文件。
  • 部署与测试:将固件部署到测试硬件上,执行自动化测试,验证系统功能。
  • 发布:将经过测试的固件和文档发布到指定服务器或传送到生产环境。

配置准备

❶ Jenkins插件配置

前面我们章节我们已经安装了大部分所需插件,可以参考博主之前的教程章节,这里就不重复了,本章节主要是增加Pipeline插件以及Jenkins Job DSL插件,基本上Jenkins配置所需的插件如下:

Git插件:用于拉取代码。
Pipeline插件:用于创建和管理流水线。
Email Extension插件:用于发送构建结果的通知。
Publish Over SSH插件:用于将构建产物部署到远程硬件。
Jenkins Job DSL插件:用于创建复杂的流水线任务。

❷ 配置交叉编译工具链

嵌入式开发通常需要在Jenkins服务器上配置交叉编译工具链。以下是配置交叉编译工具链的步骤(以GCC for ARM为例):

1、安装工具链:

sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

2、在Jenkins中配置环境变量:

Jenkins的“全局工具配置”中添加交叉编译器路径,或在流水线脚本中直接引用工具链的路径

编写自动化流水线

使用Jenkins Pipeline编写自动化脚本,可以灵活地管理构建和测试流程。以下是一个示例Pipeline脚本:

pipeline {agent anyenvironment {TOOLCHAIN_PATH = "/usr/bin/gcc-arm-none-eabi"BUILD_DIR = "build"FIRMWARE_NAME = "firmware.bin"TARGET_DEVICE = "/dev/ttyUSB0"}stages {stage('Checkout') {steps {git url: 'https://github.com/your-repo/your-embedded-project.git', branch: 'main'}}stage('Build') {steps {sh '''mkdir -p ${BUILD_DIR}export PATH=${TOOLCHAIN_PATH}:$PATHmake -C ${BUILD_DIR}'''}}stage('Unit Tests') {steps {sh '''export PATH=${TOOLCHAIN_PATH}:$PATHmake -C ${BUILD_DIR} test'''}}stage('Package') {steps {sh '''cp ${BUILD_DIR}/${FIRMWARE_NAME} ./release/cd releasemd5sum ${FIRMWARE_NAME} > ${FIRMWARE_NAME}.md5'''}}stage('Deploy to Device') {steps {sh '''st-flash --reset write ./release/${FIRMWARE_NAME} 0x8000000'''}}stage('Integration Tests') {steps {sh '''python3 ./tests/run_integration_tests.py --device ${TARGET_DEVICE}'''}}}post {always {archiveArtifacts artifacts: 'release/**', allowEmptyArchive: truejunit 'build/reports/**/*.xml'}success {emailext to: 'team@example.com',subject: "Build Success: ${currentBuild.fullDisplayName}",body: "Good news! The build ${currentBuild.fullDisplayName} was successful. Check the Jenkins interface for details."}failure {emailext to: 'team@example.com',subject: "Build Failed: ${currentBuild.fullDisplayName}",body: "Unfortunately, the build ${currentBuild.fullDisplayName} has failed. Please check the Jenkins interface for more details."}}
}

上述Pipeline脚本解释:

Checkout:从Git仓库拉取最新代码。
Build:调用Makefile进行交叉编译,生成固件文件。
Unit Tests:执行单元测试,验证基础功能。
Package:将生成的固件文件和校验信息打包。
Deploy to Device:通过st-flash工具将固件部署到目标硬件上。
Integration Tests:执行集成测试,验证系统整体功能。

硬件部署和测试

1. 部署固件

在嵌入式开发中,将固件部署到硬件设备是自动化流程中的重要一环。可以通过以下方式实现:

  • USB连接设备:通过USB将设备连接到Jenkins服务器,使用工具(如st-flash)将固件写入设备。
  • 远程部署:使用SSH连接远程设备,将固件传输并写入。

2. 自动化测试

自动化测试可以通过脚本控制硬件设备的输入输出,并验证固件的运行状态。例如,使用Python的PySerial库与串口设备通信,检查设备的输出是否符合预期。

import serialdef run_integration_tests(device):with serial.Serial(device, 115200, timeout=1) as ser:ser.write(b'run_tests\n')result = ser.read(100)assert b'test_passed' in result, "Test failed"if __name__ == "__main__":run_integration_tests('/dev/ttyUSB0')

最佳实践

  1. 版本控制与分支管理:使用Git进行版本控制,利用分支管理不同阶段的开发和发布。
  2. 模块化构建:将构建步骤模块化,便于重用和维护。
  3. 持续监控与反馈:配置Jenkins的监控和邮件通知功能,及时反馈构建和测试结果。
  4. 测试环境隔离:使用模拟器或虚拟机隔离测试环境,避免互相影响。
  5. 安全与权限管理:确保Jenkins及相关工具的安全配置,避免未授权的访问和操作。

总结

通过Jenkins实现嵌入式开发的自动化流程,可以显著提升开发效率、提高产品质量。本文详细介绍了从环境配置、交叉编译、自动化测试到硬件部署的完整流程。遵循这些步骤和最佳实践,您可以构建一个稳定、可扩展的嵌入式自动化流水线,为项目的成功奠定基础。

如果本文对您有所帮助,希望 一键三连 给博主一点点鼓励,如果您有任何疑问或建议,请随时留言讨论!


在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java框架Spring(一)
  • QT+OSG显示一个三维模型
  • 又一个强大的开源编辑器Vditor
  • safari扩展程序开发
  • 03_React 收集表单数据和 组件生命周期
  • 【drools】Rulesengine构建及intelj配置
  • 怎样写好提示词(Prompt) 二
  • ETAS工具链自动化实战指南<二>
  • 图像处理 -- 图像清晰度测量方法
  • Vue3项目开发——新闻发布管理系统(四)
  • 【解压即玩】使命de召唤4
  • Python与Plotly实现多维度数据的动态可视化——交互式股票价格
  • java-集合框架
  • 【AI绘画】Midjourney前置指令/settings设置详解
  • pdf解密软件哪个好用?掌握3个方法,轻松解锁PDF自由查看!
  • (三)从jvm层面了解线程的启动和停止
  • 2019年如何成为全栈工程师?
  • Brief introduction of how to 'Call, Apply and Bind'
  • Create React App 使用
  • Django 博客开发教程 16 - 统计文章阅读量
  • JavaScript的使用你知道几种?(上)
  • Python语法速览与机器学习开发环境搭建
  • ReactNativeweexDeviceOne对比
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 欢迎参加第二届中国游戏开发者大会
  • 目录与文件属性:编写ls
  • 微信公众号开发小记——5.python微信红包
  • 小程序测试方案初探
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • PostgreSQL之连接数修改
  • ​ubuntu下安装kvm虚拟机
  • #07【面试问题整理】嵌入式软件工程师
  • (~_~)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (5)STL算法之复制
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (C语言)共用体union的用法举例
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)(官方)UE4--图像编程----着色器开发
  • ***检测工具之RKHunter AIDE
  • ..回顾17,展望18
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net Core和.Net Standard直观理解
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net dataexcel 脚本公式 函数源码
  • @Bean有哪些属性
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)