一、背景与需求

        在传统嵌入式系统及软件项目开发中,集成工程师需通过人工操作完成多单元模块的代码合并、版本同步、编译构建及目标文件(如ELF、HEX等)生成等复杂流程。此类手动操作存在以下痛点:

  1. 效率瓶颈:人工介入导致代码集成与编译周期长,难以适应快速迭代需求;

  2. 错误风险:手动操作易引入代码冲突、环境配置遗漏等问题,影响版本稳定性;

  3. 资源消耗:重复性任务占用人力资源,增加开发成本。

为应对上述挑战,亟需构建自动化代码集成与编译体系,通过以下能力实现开发流程优化:

  • 智能化代码管理:基于持续集成(CI)工具链实现多模块代码自动合并、冲突检测及版本控制;

  • 端到端流程自动化:集成代码编译、目标文件生成、质量验证等环节,形成标准化流水线;

  • 资源效能提升:减少人工干预,缩短版本交付周期,同时确保输出一致性,为大规模协同开发提供可靠技术底座。

该方案旨在通过自动化技术重构开发流程,显著提升工程效率并降低维护成本,为高复杂度项目的敏捷化交付奠定基础。

二、整体设计流程

1.设计流程图

 

        上图是CI/CD流程中的部分流程,如有不完善的地方,欢迎各位大神前来讨论指导,因为目前处于摸索阶段,不同需求流程也会有所不同,谢谢。

三、文件/工具设计

1.项目表模版

        项目表设计根据具体需要的输入元素来设计,为了实现流程自动的特殊要求,完成项目表的设计与规范。

        下图是目前使用的项目表模板,部分属性可能和当前所描述流程没有直接关系,本文讲述流程不是唯一标准,具体流程与实际应用可以根据不同需求可以进行拓展与分化。

2.Git自动化合并工具脚本 

 1.1 概述

        Git 提供原生命令(如 pull/push)实现代码同步,但在多分支协作场景下,合并冲突的解决仍需人工干预。本工具通过封装 Git 指令为自动化脚本,实现以下目标:

  1. 自动拉取与合并:执行代码同步及分支合并操作

  2. 冲突检测与反馈:识别合并冲突并输出冲突文件列表

  3. 可扩展性:支持集成第三方合并工具(如 KDiff3、Meld)

1.2 核心功能

功能模块描述
自动同步代码执行 git pull 拉取远程最新代码,减少本地与远程仓库差异
安全合并分支通过 git merge 合并指定分支,触发冲突检测逻辑
冲突文件报告若合并失败,自动解析冲突文件路径并生成报告文件(conflicts.log
错误处理捕获合并异常状态,返回标准错误码(如 0 成功,1 冲突,2 错误)

 1.3 脚本示例(部分)

import pandas as pd
import subprocess
import os.path
import re
import sys
import numpy as np
from openpyxl import load_workbook

def merge_repository(branch):
    try:
        for i_branch in branch:
            subprocess.run(["git", "merge", i_branch], check=True,shell=True,capture_output=True,text=True)
            print(f"分支{i_branch}已成功合并到主分支")
    except subprocess.CalledProcessError as e:
        e.output.strip()
        stdout = e.output.strip()
        print(f"合并分支出错")
        if "CONFLICT" in stdout:
            conflict_files = get_conflict_files()
            print("合并冲突,以下文件需要手动解决:")
            for file in conflict_files:
                print(f"  - {file}")
            sys.exit(1)
        else:
            # 其他错误(如目标分支不存在)
            print(f"合并失败:{e.output.strip()}")
            sys.exit(1)
error_flag = 0
start, end = find_merged_row_by_content(file_path_excel, '模块分支名')
row, col = find_cell_position(df, "版本分支名")
branch_list = extract_column_data(file_path_excel, 5, start, end)
branch_main = get_cell_content(df, row, col+1)
branch_name = []
for i_b in branch_list:
    if str(i_b) != '':
        i_b = 'origin/'+str(i_b)
        branch_name.append(i_b)
os.chdir(local_path)
switch_branch(branch_main)
for i_branch in branch_name:
    all_branch = get_branches()
    if i_branch not in all_branch:
        print(f'{i_branch}分支名错误')
        error_flag = error_flag + 1
if error_flag == 0:
    merge_repository(branch_name)

三、实现效果

1.Git合并效果图

2. 自动编译效果图

        编译使用的是tasking编译环境,具体其他编译环境可以根据相关指令去实现,代码生成与工程同步合并,本文章所介绍的是基于vector工具链来进行开发的。

3.上传Git分支效果图

 4.文件打包效果图

更多推荐