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

在这里插入图片描述

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

前言

在嵌入式开发中,自动化构建、测试和部署流程可以大大提高开发效率和产品质量。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 any
    
    environment {
        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}:$PATH
                make -C ${BUILD_DIR}
                '''
            }
        }
        
        stage('Unit Tests') {
            steps {
                sh '''
                export PATH=${TOOLCHAIN_PATH}:$PATH
                make -C ${BUILD_DIR} test
                '''
            }
        }
        
        stage('Package') {
            steps {
                sh '''
                cp ${BUILD_DIR}/${FIRMWARE_NAME} ./release/
                cd release
                md5sum ${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: true
            junit '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 serial

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

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


在这里插入图片描述

评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micro麦可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值