CI/CD 全流程全解

🚀 CI/CD 全流程全解

一篇适合设备端开发者、嵌入式工程师、新手工程师的保姆级教程,涵盖从 GitLab CI/CD 搭建到边缘设备部署。


🧠 目录

  1. CI/CD 简介
  2. 环境准备
  3. 创建 .gitlab-ci.yml
  4. 自定义编译脚本
  5. 部署配置 SSH 密钥
  6. 流程示意图
  7. 调试技巧
  8. 实际应用场景

CI/CD 简介

缩写全称作用
CIContinuous Integration自动编译、测试
CDContinuous Deployment自动部署、上线

环境准备

✅ 安装 GitLab Runner

sudo apt install gitlab-runner
sudo gitlab-runner register

注册信息填写示例:

GitLab URL: https://gitlab.com
Token: <项目Token>
描述: edge-runner
执行器: shell

创建 .gitlab-ci.yml

在项目根目录新建:

stages:- build- deployvariables:PROJECT_DIR: "/build/project"build:stage: buildscript:- echo "🔧 开始编译..."- mkdir -p $PROJECT_DIR- cp -r * $PROJECT_DIR- cd $PROJECT_DIR- bash scripts/build_rk3588.shartifacts:paths:- $PROJECT_DIR/output/deploy:stage: deployscript:- echo "🚀 开始部署..."- scp $PROJECT_DIR/output/* root@192.168.1.100:/opt/heahu/- ssh root@192.168.1.100 'systemctl restart heahu.service'

自定义编译脚本

scripts/build_rk3588.sh

#!/bin/bash
export TOOLCHAIN=/opt/toolchains/rk3588
export PATH=$TOOLCHAIN/bin:$PATHmkdir -p output
arm-linux-gnueabihf-g++ -o output/main core/main.cpp
cp configs/*.yaml output/

部署配置 SSH 密钥

ssh-keygen -t rsa -f deploy_key

将公钥添加到设备 ~/.ssh/authorized_keys

私钥添加到 GitLab 的变量:

变量名
SSH_PRIVATE_KEYdeploy_key 内容

.gitlab-ci.yml 添加:

before_script:- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'- eval $(ssh-agent -s)- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -- mkdir -p ~/.ssh- chmod 700 ~/.ssh- ssh-keyscan 192.168.1.100 >> ~/.ssh/known_hosts

流程示意图

GitLab 提交代码↓
CI Runner 编译构建↓
打包产物↓
部署到设备↓
自动重启服务

调试技巧

  • GitLab -> CI/CD -> Pipelines -> 查看日志
  • 构建失败时添加 echo 输出诊断信息
  • 确保 Runner 有权限连接设备

实际应用场景

场景示例
模型更新提交新 .rknn 自动替换部署
OTA 升级提交代码后自动部署
一键测试本地提交触发部署设备

如果你还需要 VSCode + GitLab 使用教程、边缘设备系统初始化脚本、部署模型自动更新流程等,欢迎关注后续内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35862.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 运行报错:InvalidOperationException: Insecure connection not allowed 的原因

当你在 Unity 中运行项目时&#xff0c;如果遇到 InvalidOperationException: Insecure connection not allowed 这个错误&#xff0c;通常是由于以下原因导致的&#xff1a; 1. UnityWebRequest 的安全限制 UnityWebRequest 是 Unity 用于发送 HTTP 请求的核心组件。从 Unit…

ubuntu下TFTP服务器搭建

tftp 命令的作用和 nfs 命令一样&#xff0c;都是用于通过网络下载东西到 DRAM 中&#xff0c;只是 tftp 命令 使用的 TFTP 协议&#xff0c; Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器&#xff0c; 需要安装 tftp-hpa 和 tftpd-hpa&#xff0c;命令…

Python+Django网页前后端rsp云端摄像头人数监控系统

程序示例精选 PythonDjango网页前后端rsp云端摄像头人数监控系统 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonDjango网页前后端rsp云端摄像头人数监控系统》编写代码&#xff0c;…

糊涂人寄信

1.糊涂人寄信 - 蓝桥云课 糊涂人寄信 题目描述 有一个糊涂人&#xff0c;写了 n 封信和 n 个信封&#xff0c;到了邮寄的时候&#xff0c;把所有的信都装错了信封。求装错信封可能的种类数。 输入描述 有多行读入&#xff0c;每行输入一个正整数 n&#xff0c;表示一种情况…

华为ISC+战略规划项目数字化转型驱动的智慧供应链革新(169页PPT)(文末有下载方式)

资料解读&#xff1a;华为ISC战略规划项目数字化转型驱动的智慧供应链革新 详细资料请看本解读文章的最后内容。 华为的ISC战略规划项目是其供应链数字化转型的核心&#xff0c;旨在通过智慧供应链的革新&#xff0c;提升企业的竞争力和运营效率。本文将从多个维度详细解读这…

深度学习框架PyTorch——从入门到精通(5)自动微分

使用torch.autograd自动微分 张量、函数和计算图计算梯度禁用梯度追踪关于计算图的更多信息张量梯度和雅可比乘积 在训练神经网络时&#xff0c;最常用的算法是反向传播。在该算法中&#xff0c;参数&#xff08;模型权重&#xff09;根据损失函数的梯度相对于给定参数进行调整…

Mobile-Agent-V:通过视频引导的多智体协作学习移动设备操作

25年2月来自北京交大和阿里巴巴公司的论文“Mobile-Agent-V: Learning Mobile Device Operation Through Video-Guided Multi-Agent Collaboration”。 移动设备使用量的快速增长&#xff0c;迫切需要改进自动化以实现无缝任务管理。然而&#xff0c;因缺乏操作知识&#xff0…

单片机开发资源分析的实战——以STM32F103C8T6为例子的单片机资源分析

目录 第一点&#xff1a;为什么叫STM32F103C8T6 从资源手册拿到我们的对STM32F103C8T6的资源描述 第二件事情&#xff0c;关心我们的GPIO引脚输出 第三件事情&#xff1a;去找对应外设的说明部分 前言 本文章隶属于项目&#xff1a; Charliechen114514/BetterATK: This is…

《基于Spring Boot+Vue的智慧养老系统的设计与实现》开题报告

个人主页:@大数据蟒行探索者 一、研究背景及国内外研究现状 1.研究背景 根据1982年老龄问题世界大会联合国制定的标准,如果一个国家中超过65岁的老人占全国总人口的7%以上,或者超过60岁的老人占全国总人口的10%以上,那么这个国家将被定义为“老龄化社会”[1]。 随着国…

微软OneNote无法同步解决方案

目录 前言原因UWP特性 解决方案C***h注册表 参考链接 前言 假设有多台Windows电脑&#xff0c;最方便且免费的多设备笔记同步方案就是微软自家的OneNote&#xff0c;使用OneDrive自带的5G云存储。 但是在国内大陆的OneNote&#xff0c;经常会出现无法同步、同步失败&#xff1…

硬件设计抽象级别详解:门级、RTL级、行为级与HLS

硬件设计抽象级别详解&#xff1a;门级、RTL级、行为级与HLS 引言 在数字系统设计领域&#xff0c;硬件描述语言(HDL)提供了多种抽象级别来描述电路功能和结构。从最底层的门级描述到高层的行为级描述&#xff0c;每一种抽象级别都有其特定的用途和优势。理解这些不同级别以及…

WPF程序使用AutoUpdate实现自动更新

AutoUpdate.NET使用 一、AutoUpdater.NET 简介 AutoUpdater.NET 是一个开源库&#xff0c;支持从各种源&#xff08;如GitHub、FTP、HTTP服务器等&#xff09;下载并安装更新。它提供了灵活的配置选项&#xff0c;允许开发者根据需求定制更新检查逻辑和用户体验。 二、安装 …

Qwen2-Audio:通义千问音频大模型技术解读

引言:从llm到mlm(audio) 大型语言模型(LLM)的发展日新月异,它们在文本理解、生成、推理等方面展现出惊人的能力。然而,交互模态不仅仅依赖于文字,语音、语调、环境音等听觉信息同样承载着丰富的内容。阿里巴巴通义千问团队,推出了 Qwen-Audio 系列模型,这里我们一起…

问题 | ACOS(X) 与 ACOSD(X)的区别

github&#xff1a;https://github.com/MichaelBeechan CSDN&#xff1a;https://blog.csdn.net/u011344545 [TOC](ACOS(X) 与 ACOSD(X)的区别) ACOSD(X) 是反余弦函数&#xff0c;结果以角度形式表示。ACOS(X) 用于计算 X 中每个元素的反余弦值。当 X 为复数时&#xff0c;结…

两款软件助力图片视频去水印及图像编辑

今天给大家分享两款呼声很高的软件&#xff0c;它们都能处理图片和视频去水印相关的问题。其中一款软件在去水印的同时&#xff0c;图像编辑功能也十分出色&#xff1b;另一款软件专注于图片和视频去水印&#xff0c;去除效果好且支持批量处理。下面就来详细了解一下。 Remover…

Hessian矩阵详解与应用

前言 本文隶属于专栏《机器学习数学通关指南》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见《机器学习数学通关指南》 ima 知识库 知识库广场搜索&#…

【软件系统架构】单体架构

一、引言 在软件开发的漫长历程中&#xff0c;架构的选择一直是至关重要的决策。单体架构作为一种经典的架构模式&#xff0c;曾经在许多项目中发挥着不可替代的作用。虽然如今微服务等架构逐渐流行&#xff0c;但理解单体架构对于深入掌握软件架构体系仍然有着重要意义。 二、…

[C++初阶] :从C到C++

目录 C发展史&#xff0c;C语言的特性C新增关键字namespace关键字C语言的命名缺陷&#xff08;重定义现象&#xff09;域与指定访问操作符 “::”命名空间域详解namespace std C的输入与输出函数重载什么是重载,重载的几种常见形态重载的作用注意不构成重载的情况 缺省参数1.全…

[快乐学坊management_1] With Cursor | Mysql设计 | 服务接口设计与开发

目录 数据库设计流程 三张表 测试 接口设计 部门管理接口文档 1. 查询所有部门 2. 新增部门 ⭕3. 根据ID查询部门 4. 修改部门 5. 删除部门 &#xff08;部门分页条件查询&#xff09; 错误响应示例 接口设计规范 服务端开发 接口开发 数据库设计流程 01 明确业…

实用插件推荐 -------- 一个可以将任意语言(python、C/C++、go、java等)的程序转换为汇编语言的小插件

链接为&#xff1a; Compiler Explorer 界面&#xff1a; 参考自&#xff1a;如何获取虚函数表及内存分析_com的虚函数表怎么寻找-CSDN博客