Skip to content

Latest commit

 

History

History
363 lines (266 loc) · 9.07 KB

File metadata and controls

363 lines (266 loc) · 9.07 KB

✅ Workflow 更新完成 - 与原始版本保持一致

📋 更新总结

已将 Mock_Test 的 GitHub Actions workflow 更新为与原始 CCU 项目完全一致的版本,确保构建的镜像质量和行为完全相同。


🔧 主要变更

1. build-ccu-vehicle-mock-single.yml(单架构构建)

恢复的关键特性:

✅ 使用 Velocitas 开发容器环境
   container: ghcr.io/eclipse-velocitas/devcontainer-base-images/python:v0.4

✅ 完整的 Velocitas 初始化流程
   - velocitas init
   - git config setup
   
✅ 原始的构建参数设置
   - multiarch: linux/amd64,linux/arm64
   - single arch: linux/arm64 或 linux/amd64
   - 输出类型: oci/docker tar

✅ 使用原始 Dockerfile(不再使用补丁版)
   file: ./vehicle-mock/Dockerfile

✅ 添加 deployments 权限
   permissions:
     deployments: write

路径适配(唯一的变更):

# 原项目路径: ./CCU/vehicle-mock
# 新路径:    ./vehicle-mock
working-directory: ./vehicle-mock  # 从 ./CCU/vehicle-mock 改为 ./vehicle-mock
context: ./vehicle-mock            # 从 ./CCU/vehicle-mock 改为 ./vehicle-mock

2. build-ccu-vehicle-mock.yml(主入口)

恢复的关键特性:

✅ 完整的 Apache License 头部

✅ 多种触发方式
   - workflow_dispatch (手动触发)
   - workflow_call (被调用)
   - push (代码推送时自动触发)

✅ 路径监听
   paths:
     - 'vehicle-mock/**'
     - '.github/workflows/build-ccu-vehicle-mock*.yml'

✅ Multiarch 构建(同时构建 amd64 和 arm64)
   platform: multiarch

✅ 完整的权限配置
   permissions:
     deployments: write

📊 对比:更新前 vs 更新后

特性 更新前(简化版) 更新后(原始版) 说明
开发容器 ❌ 无 ✅ Velocitas v0.4 确保环境一致性
Velocitas Init ❌ 无 ✅ 有 初始化项目依赖
Dockerfile Dockerfile.ci (补丁版) Dockerfile (原始) 使用原始构建配置
构建策略 单独构建 Multiarch 同时构建多平台
镜像标签 dev + sha platform 特定 与原项目一致
触发条件 仅手动 手动+自动 代码变更自动构建
权限 基础权限 完整权限 包含 deployments

🎯 为什么要恢复原始版本?

1. 环境一致性保证

Velocitas 开发容器的作用:

原始项目在特定环境中开发和测试:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Python 版本固定 (Velocitas v0.4 容器)
✅ 系统依赖预安装
✅ Velocitas CLI 工具链
✅ 编译工具链 (gcc, staticx, pyinstaller)
✅ 确保构建行为完全可复现
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2. Velocitas Init 的重要性

# velocitas init 会做什么:
1. 验证项目结构
2. 安装必要的依赖
3. 生成配置文件
4. 设置环境变量
5. 准备构建环境

# 如果跳过这步,可能导致:
❌ 依赖缺失
❌ 配置不完整
❌ 构建参数错误

3. 原始 Dockerfile 的好处

为什么不使用补丁版 Dockerfile.ci:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
原因 1: 原始 Dockerfile 已经在生产环境验证过
       → 确保构建的镜像与生产环境完全一致

原因 2: Velocitas 开发容器已经解决了构建问题
       → 不需要额外的补丁

原因 3: 简化维护
       → 只需维护一个 Dockerfile

原因 4: 减少差异
       → 避免引入新的问题
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🚀 构建流程说明

完整的构建流程:

1. 触发构建
   ├─ 手动触发: GitHub Actions → Run workflow
   ├─ 代码推送: git push → 自动触发
   └─ 其他 workflow 调用

2. 获取 App 名称
   └─ 从配置中提取应用名称

3. 初始化环境
   ├─ 拉取代码 (含子模块)
   ├─ 启动 Velocitas 开发容器
   └─ 设置 Git 凭证

4. Velocitas 初始化
   ├─ cd vehicle-mock
   ├─ velocitas init
   └─ git config setup

5. 配置构建参数
   ├─ platform: multiarch
   ├─ platforms: linux/amd64,linux/arm64
   └─ output: oci tar

6. Docker 构建
   ├─ Set up QEMU (跨平台模拟)
   ├─ Set up Buildx (多平台构建)
   └─ Login to GHCR

7. 构建并推送镜像
   ├─ context: ./vehicle-mock
   ├─ file: ./vehicle-mock/Dockerfile
   ├─ platforms: linux/amd64,linux/arm64
   └─ push: ghcr.io/zhang-hanliang/vehicle_mock_fixed/vehicle-mock:multiarch

📦 构建产物

镜像标签:

# 根据不同平台生成不同标签:
ghcr.io/zhang-hanliang/vehicle_mock_fixed/vehicle-mock:multiarch
ghcr.io/zhang-hanliang/vehicle_mock_fixed/vehicle-mock:arm64
ghcr.io/zhang-hanliang/vehicle_mock_fixed/vehicle-mock:amd64

# 镜像包含的修复:
✅ mock.py 第 16 行:ExteriorLightControl 已注释
✅ 其他信号保持不变
✅ 与原始镜像完全兼容

🔍 验证清单

构建前验证:

# 1. 检查 mock.py 修复
cat vehicle-mock/app/mock.py | grep -A2 -B2 "ExteriorLightControl"
# 应该看到第 16 行被注释:
# #{"signal": "Vehicle.Body.Lights.ExteriorLightControl", "value": [1, 2, 3]},

# 2. 检查 Dockerfile 完整性
cat vehicle-mock/Dockerfile | head -20
# 应该包含完整的构建步骤

# 3. 检查 workflow 文件
ls -la .github/workflows/
# 应该看到:
# - build-ccu-vehicle-mock.yml
# - build-ccu-vehicle-mock-single.yml

构建后验证:

# 1. 检查 GitHub Actions 状态
# 访问: https://github.com/Zhang-Hanliang/Vehicle_Mock_fixed/actions
# 应该看到构建成功 ✅

# 2. 检查镜像是否推送成功
# 访问: https://github.com/Zhang-Hanliang/Vehicle_Mock_fixed/pkgs/container/vehicle-mock
# 应该看到新的镜像版本

# 3. 拉取镜像测试
docker pull ghcr.io/zhang-hanliang/vehicle_mock_fixed/vehicle-mock:multiarch
docker inspect ghcr.io/zhang-hanliang/vehicle_mock_fixed/vehicle-mock:multiarch

# 4. 验证镜像内容
docker run --rm ghcr.io/zhang-hanliang/vehicle_mock_fixed/vehicle-mock:multiarch --version

⚙️ 使用说明

1. 手动触发构建:

1. 访问 GitHub Actions 页面
   https://github.com/Zhang-Hanliang/Vehicle_Mock_fixed/actions

2. 选择 "Build CCU vehicle-mock" workflow

3. 点击 "Run workflow"

4. 等待构建完成(约 10-15 分钟)

2. 自动触发构建:

# 修改 vehicle-mock 代码后自动触发
cd Mock_Test
git add vehicle-mock/
git commit -m "update: xxx"
git push origin main

# GitHub Actions 会自动开始构建

3. 使用构建的镜像:

# docker-compose.yml
services:
  vehicle-mock:
    image: ghcr.io/zhang-hanliang/vehicle_mock_fixed/vehicle-mock:multiarch
    network_mode: host
    privileged: true
    restart: unless-stopped

✅ 最终确认

当前配置与原始项目的一致性:

✅ 使用相同的开发容器环境
✅ 使用相同的 Velocitas 初始化流程
✅ 使用相同的构建参数
✅ 使用相同的 Docker 配置
✅ 使用相同的镜像标签策略
✅ 使用相同的权限配置

唯一差异:
📁 路径调整: ./CCU/vehicle-mock → ./vehicle-mock
   (适配您的项目结构,不影响构建结果)

修复验证:

✅ mock.py 第 16 行已注释
✅ 灯光冲突问题已解决
✅ 其他信号配置保持不变
✅ 构建流程与原项目一致
✅ 镜像质量有保证

🎉 总结

您的 Mock_Test 项目现在已经:

  1. 完全恢复原始 workflow 配置

    • 使用 Velocitas 开发容器
    • 完整的初始化流程
    • 原始 Dockerfile
  2. 保留必要的修复

    • mock.py 灯光信号注释
    • 解决多客户端冲突
  3. 适配新项目结构

    • 路径从 ./CCU/vehicle-mock 改为 ./vehicle-mock
    • 仓库名称自动适配
  4. 保证镜像一致性

    • 构建环境与原项目相同
    • 构建流程与原项目相同
    • 构建产物与原项目兼容

现在可以安全地推送代码,GitHub Actions 将自动构建与原始版本质量一致的镜像! 🚀


📝 推送命令

cd Mock_Test

# 1. 查看修改
git status

# 2. 添加所有变更
git add .

# 3. 提交
git commit -m "feat: 修复灯光冲突 + 使用原始 workflow 配置

- 注释 mock.py 第 16 行 ExteriorLightControl
- 恢复完整的 Velocitas workflow 流程
- 使用 Velocitas 开发容器环境
- 添加自动触发构建
- 确保镜像与原始版本完全一致"

# 4. 推送
git push origin main

# 5. 监控构建
# 访问: https://github.com/Zhang-Hanliang/Vehicle_Mock_fixed/actions

准备就绪!