菜单

CI/CD 流水线

相关源文件

本文档描述了 Joplin 项目中使用的持续集成和持续部署(CI/CD)流水线。它涵盖了所有 Joplin 应用程序在不同平台上的自动化测试、构建和发布过程。

概述

Joplin 的 CI/CD 流水线自动化了所有支持平台的应用程序的代码验证、测试、构建和发布。该流水线主要通过 GitHub Actions 和处理构建及发布过程各个方面的自定义脚本来实现。

来源

GitHub Actions 配置

CI/CD 流水线主要通过 YAML 配置文件中定义的 GitHub Actions 工作流来实现。主工作流文件是 github-actions-main.yml,它协调跨多个平台的构建过程。

主工作流

主 GitHub Actions 工作流在 push 和 pull request 事件上运行。它根据事件类型和正在构建的平台执行不同的操作。

来源

服务器 Docker 镜像构建

有一个单独的工作流用于构建 Joplin 服务器组件的 Docker 镜像。这确保了服务器镜像能够为多种架构正确构建。

来源

持续集成流程

持续集成过程由 run_ci.sh 脚本处理,该脚本根据上下文执行各种检查和构建。

测试与验证

该脚本运行各种测试和检查

  1. 包安装:使用 Yarn 安装所有依赖项
  2. 单元测试:运行所有包的单元测试
  3. 代码风格检查:运行 linters 来检查代码风格
  4. 翻译验证:验证翻译文件
  5. 缺失字符串检查:检查缺失的翻译字符串
  6. 忽略文件检查:确保 .gitignore 和 .eslintignore 是最新的
  7. 网站构建验证:确保网站仍能构建
  8. 拼写检查:检查整个代码库的拼写

来源

构建流程

构建过程因平台而异,并且根据是发布构建还是测试构建,触发方式也不同。

桌面应用程序构建

桌面应用程序使用 Electron Builder 构建 Windows、macOS 和 Linux 平台。该过程包括

  1. 编译 TypeScript 代码
  2. 使用 Electron Builder 构建应用程序
  3. 签名应用程序(用于发布)
  4. 发布到 GitHub Releases(用于发布标签)

来源

移动应用程序构建

Android 应用程序构建过程由一个单独的工作流处理

  1. 设置 Java、Node.js 和 Yarn
  2. 安装依赖项
  3. 组装 Android 发行版

来源

服务器 Docker 构建

服务器以 Docker 镜像的形式构建,支持 AMD64 和 ARM64 架构

  1. 解析 Docker 构建的参数
  2. 生成适当的 Docker 标签
  3. 构建 Docker 镜像
  4. 推送到 Docker Hub(用于发布)

来源

发布流程

当标签推送到仓库时,发布过程将被触发。不同的标签格式会触发不同的发布过程

  • v 开头的标签(例如 v1.2.3)会触发桌面应用程序发布
  • server- 开头的标签(例如 server-v1.2.3)会触发服务器发布
  • 包含 androidios 的标签会触发移动应用发布

版本控制和变更日志

准备发布时,将根据 git commit 消息自动生成变更日志

  1. 提取自上次发布以来的提交
  2. 解析 commit 消息以识别更改类型(新增、改进、修复)
  3. 格式化变更日志以供发布
  4. 更新仓库中的变更日志

来源

发布到 GitHub Releases

当发布标签被推送时,CI 流水线会创建一个包含构建工件的 GitHub Release

  1. 为所有平台构建应用程序
  2. 创建 GitHub 发布
  3. 将工件上传到 Release
  4. 更新文档中的下载链接

来源

部署过程

桌面应用程序部署

桌面应用程序通过 GitHub Releases 进行部署,用户可以直接从中下载

  1. 发布工件被上传到 GitHub Releases
  2. 文档中的下载链接已更新
  3. 应用程序的自动更新机制允许现有用户进行升级

服务端部署

服务器作为 Docker 镜像进行部署

  1. 为多种架构(AMD64、ARM64)构建镜像
  2. 将镜像推送到 Docker Hub
  3. 创建 Docker manifest 以提供特定架构的镜像

来源

网站更新

发布后,Joplin 网站上的下载链接将更新为指向新版本

  1. 从 GitHub 获取最新发布信息
  2. 提取不同平台的下载 URL
  3. 更新网站 Markdown 文件中的下载链接

来源

CI/CD 组件和文件结构

CI/CD 流水线由位于不同目录的几个关键组件组成

组件目的位置
主工作流协调 CI/CD 流程.github/workflows/github-actions-main.yml
平台特定工作流为特定平台构建.github/workflows/build-*.yml
CI 脚本处理测试和构建逻辑.github/scripts/run_ci.sh
Docker 构建脚本构建服务器 Docker 镜像packages/tools/buildServerDocker.ts
发布脚本处理发布自动化packages/tools/release-*.ts
变更日志生成器创建发布说明packages/tools/git-changelog.ts
下载链接更新程序更新网站链接packages/tools/update-readme-download.ts

来源

  • 仓库文件结构

其他 CI/CD 功能

跨平台测试

CI/CD 流水线在多个平台上运行测试以确保兼容性

  • Linux (Ubuntu)
  • macOS
  • Windows
  • ARM 架构

发布验证

构建完成后,流水线执行各种验证检查

  1. 对于桌面应用程序,它确保应用程序能正确启动
  2. 对于服务器 Docker 镜像,它验证 HTTP 服务器是否响应正常

自动预发布

该流水线支持在最终发布前创建预发布版本进行测试

  1. 预发布版本将带有 -beta 后缀进行标记
  2. 它们经历与常规发布相同的构建过程
  3. 它们在 GitHub 上被标记为预发布

来源