CI/CD 全流程全解

🚀 CI/CD 全流程全解

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


🧠 目录

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

CI/CD 简介

缩写 全称 作用
CI Continuous Integration 自动编译、测试
CD Continuous Deployment 自动部署、上线

环境准备

✅ 安装 GitLab Runner

bash 复制代码
sudo apt install gitlab-runner
sudo gitlab-runner register

注册信息填写示例:

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

创建 .gitlab-ci.yml

在项目根目录新建:

yaml 复制代码
stages:
  - build
  - deploy

variables:
  PROJECT_DIR: "/build/project"

build:
  stage: build
  script:
    - echo "🔧 开始编译..."
    - mkdir -p $PROJECT_DIR
    - cp -r * $PROJECT_DIR
    - cd $PROJECT_DIR
    - bash scripts/build_rk3588.sh
  artifacts:
    paths:
      - $PROJECT_DIR/output/

deploy:
  stage: deploy
  script:
    - echo "🚀 开始部署..."
    - scp $PROJECT_DIR/output/* [email protected]:/opt/heahu/
    - ssh [email protected] 'systemctl restart heahu.service'

自定义编译脚本

scripts/build_rk3588.sh

bash 复制代码
#!/bin/bash
export TOOLCHAIN=/opt/toolchains/rk3588
export PATH=$TOOLCHAIN/bin:$PATH

mkdir -p output
arm-linux-gnueabihf-g++ -o output/main core/main.cpp
cp configs/*.yaml output/

部署配置 SSH 密钥

bash 复制代码
ssh-keygen -t rsa -f deploy_key

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

私钥添加到 GitLab 的变量:

变量名
SSH_PRIVATE_KEY deploy_key 内容

.gitlab-ci.yml 添加:

yaml 复制代码
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

流程示意图

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

调试技巧

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

实际应用场景

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

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

相关推荐
z263730561124 分钟前
Git 面试问题,解决冲突
大数据·git·elasticsearch
apcipot_rain27 分钟前
【密码学——基础理论与应用】李子臣编著 第四章 SM4分组密码算法 课后习题
python·密码学
大模型铲屎官44 分钟前
从零精通机器学习:线性回归入门
开发语言·人工智能·python·算法·机器学习·回归·线性回归
范哥来了44 分钟前
python web开发django库安装与使用
前端·python·django
jay丿1 小时前
使用 Django 的 `FileResponse` 实现文件下载与在线预览
后端·python·django
蹦蹦跳跳真可爱5891 小时前
Python----计算机视觉处理(Opencv:图片颜色识别:RGB颜色空间,HSV颜色空间,掩膜)
人工智能·python·opencv·计算机视觉
Python破壁人手记1 小时前
《我的Python觉醒之路》之转型Python(十五)——控制流
java·服务器·开发语言·网络·python
独行soc1 小时前
2025年渗透测试面试题总结-某四字大厂面试复盘 一面(题目+回答)
网络·python·科技·面试·职场和发展·红蓝攻防
才华是浅浅的耐心2 小时前
基于 Python 爬取 TikTok 搜索数据 Tiktok爬虫(2025.3.17)
开发语言·python
等风来不如迎风去2 小时前
【python】http post 在body中传递json数据 以发送
python·http·json