jenkins 自动化部署CI/CD流程之集成合并与编译
一、背景与需求
在传统嵌入式系统及软件项目开发中,集成工程师需通过人工操作完成多单元模块的代码合并、版本同步、编译构建及目标文件(如ELF、HEX等)生成等复杂流程。此类手动操作存在以下痛点:
-
效率瓶颈:人工介入导致代码集成与编译周期长,难以适应快速迭代需求;
-
错误风险:手动操作易引入代码冲突、环境配置遗漏等问题,影响版本稳定性;
-
资源消耗:重复性任务占用人力资源,增加开发成本。
为应对上述挑战,亟需构建自动化代码集成与编译体系,通过以下能力实现开发流程优化:
-
智能化代码管理:基于持续集成(CI)工具链实现多模块代码自动合并、冲突检测及版本控制;
-
端到端流程自动化:集成代码编译、目标文件生成、质量验证等环节,形成标准化流水线;
-
资源效能提升:减少人工干预,缩短版本交付周期,同时确保输出一致性,为大规模协同开发提供可靠技术底座。
该方案旨在通过自动化技术重构开发流程,显著提升工程效率并降低维护成本,为高复杂度项目的敏捷化交付奠定基础。
二、整体设计流程
1.设计流程图

上图是CI/CD流程中的部分流程,如有不完善的地方,欢迎各位大神前来讨论指导,因为目前处于摸索阶段,不同需求流程也会有所不同,谢谢。
三、文件/工具设计
1.项目表模版
项目表设计根据具体需要的输入元素来设计,为了实现流程自动的特殊要求,完成项目表的设计与规范。
下图是目前使用的项目表模板,部分属性可能和当前所描述流程没有直接关系,本文讲述流程不是唯一标准,具体流程与实际应用可以根据不同需求可以进行拓展与分化。

2.Git自动化合并工具脚本
1.1 概述
Git 提供原生命令(如 pull/push)实现代码同步,但在多分支协作场景下,合并冲突的解决仍需人工干预。本工具通过封装 Git 指令为自动化脚本,实现以下目标:
-
自动拉取与合并:执行代码同步及分支合并操作
-
冲突检测与反馈:识别合并冲突并输出冲突文件列表
-
可扩展性:支持集成第三方合并工具(如 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.文件打包效果图

更多推荐

所有评论(0)