菜单

CI/CD 流水线

相关源文件

目的与范围

本文档描述了 GPT4All 项目中使用的持续集成和持续部署(CI/CD)流水线。它涵盖了构建过程、平台特定考量、签名和公证程序,以及如何在不同操作系统上打包和部署构件。有关构建系统本身的信息,请参阅 构建系统

概述

GPT4All 的 CI/CD 流水线使用 CircleCI 实现,旨在自动化构建、测试、签名和跨 Windows、macOS 和 Linux 部署应用程序。该流水线支持在线(较小,安装时需要互联网)和离线(较大,自包含)安装程序。

来源: .circleci/config.yml1-23 .circleci/continue_config.yml7-19

管道架构

基于路径的过滤

流水线使用 CircleCI 的 path-filtering orb 来根据更改的文件确定应运行哪些工作流。这通过仅构建必需的部分来节省 CI 资源。

来源: .circleci/config.yml9-22

聊天应用构建矩阵

聊天应用的构建过程按平台(macOS、Windows、Linux)和安装程序类型(在线、离线)进行矩阵化。

来源: .circleci/continue_config.yml98-566

构建流程详解

CMake 配置

构建过程由 CMake 驱动,CMake 根据目标平台和安装程序类型使用各种选项配置构建系统。

来源: gpt4all-chat/CMakeLists.txt1-623

平台特定构建步骤

macOS 构建

在 macOS 上,构建过程包含额外的应用程序包和安装程序的签名和公证步骤。

来源: .circleci/continue_config.yml98-264 gpt4all-chat/cmake/deploy-qt-mac.cmake.in1-27

Windows 构建

Windows 构建需要 CUDA 和 Vulkan SDK 等额外依赖项,并使用 AzureSignTool 进行签名。

来源: .circleci/continue_config.yml558-712

Linux 构建

Linux 构建使用 linuxdeployqt 来部署 Qt 依赖项。

来源: .circleci/continue_config.yml428-491

使用 CPack 和 Qt Installer Framework 创建安装程序

GPT4All 使用 CPack 和 Qt Installer Framework (IFW) 为所有平台创建安装程序。

来源: gpt4all-chat/cmake/cpack_config.cmake1-49 gpt4all-chat/CMakeLists.txt580-593

代码签名和安全性

macOS 签名和公证

macOS 构建需要几个安全步骤来符合 Apple 的要求。

来源: .circleci/continue_config.yml193-264 gpt4all-chat/CMakeLists.txt413-436

Windows 签名

Windows 构建使用 AzureSignTool,它与 Azure Key Vault 集成以进行证书管理。

来源: .circleci/continue_config.yml741-785 gpt4all-chat/CMakeLists.txt517-524

构建在线与离线安装程序

GPT4All 通过 CMake 选项支持在线和离线安装程序。

来源: gpt4all-chat/CMakeLists.txt33-34 gpt4all-chat/CMakeLists.txt605-622

性能优化

流水线包含多项优化措施以提高构建性能

  1. ccache:用于缓存构建之间的编译对象
  2. 基于路径的过滤:仅触发必要的构建
  3. 构建变体:并行构建不同的配置

来源: .circleci/continue_config.yml140-141 .circleci/continue_config.yml457 .circleci/continue_config.yml576

安装测试

在构建和签名安装程序后,流水线会测试安装过程,以验证构件是否正常工作。

来源: .circleci/continue_config.yml411-426 .circleci/continue_config.yml483-491 .circleci/continue_config.yml800-812

与其他系统集成

CI/CD 流水线集成了多个外部系统

  1. Apple 公证服务:用于 macOS 公证
  2. Azure Key Vault:用于 Windows 代码签名
  3. 内容分发网络:用于托管在线安装程序存储库

总结

GPT4All 的 CI/CD 流水线提供了一个强大的系统,用于在多个平台上构建、签名和分发应用程序。该流水线使用 CircleCI、CMake 和 CPack 与 Qt Installer Framework 结合,以自动化从代码提交到可分发安装程序的整个过程。通过支持在线和离线安装程序,该系统在提供灵活性的同时,并通过适当的代码签名和公证来维护安全性。

来源: .circleci/config.yml .circleci/continue_config.yml gpt4all-chat/CMakeLists.txt gpt4all-chat/cmake/cpack_config.cmake