本文档描述了 Joplin 项目中使用的持续集成和持续部署(CI/CD)流水线。它涵盖了所有 Joplin 应用程序在不同平台上的自动化测试、构建和发布过程。
Joplin 的 CI/CD 流水线自动化了所有支持平台的应用程序的代码验证、测试、构建和发布。该流水线主要通过 GitHub Actions 和处理构建及发布过程各个方面的自定义脚本来实现。
来源
CI/CD 流水线主要通过 YAML 配置文件中定义的 GitHub Actions 工作流来实现。主工作流文件是 github-actions-main.yml,它协调跨多个平台的构建过程。
主 GitHub Actions 工作流在 push 和 pull request 事件上运行。它根据事件类型和正在构建的平台执行不同的操作。
来源
有一个单独的工作流用于构建 Joplin 服务器组件的 Docker 镜像。这确保了服务器镜像能够为多种架构正确构建。
来源
持续集成过程由 run_ci.sh 脚本处理,该脚本根据上下文执行各种检查和构建。
该脚本运行各种测试和检查
来源
构建过程因平台而异,并且根据是发布构建还是测试构建,触发方式也不同。
桌面应用程序使用 Electron Builder 构建 Windows、macOS 和 Linux 平台。该过程包括
来源
Android 应用程序构建过程由一个单独的工作流处理
来源
服务器以 Docker 镜像的形式构建,支持 AMD64 和 ARM64 架构
来源
当标签推送到仓库时,发布过程将被触发。不同的标签格式会触发不同的发布过程
v 开头的标签(例如 v1.2.3)会触发桌面应用程序发布server- 开头的标签(例如 server-v1.2.3)会触发服务器发布android 或 ios 的标签会触发移动应用发布准备发布时,将根据 git commit 消息自动生成变更日志
来源
当发布标签被推送时,CI 流水线会创建一个包含构建工件的 GitHub Release
来源
桌面应用程序通过 GitHub Releases 进行部署,用户可以直接从中下载
服务器作为 Docker 镜像进行部署
来源
发布后,Joplin 网站上的下载链接将更新为指向新版本
来源
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 流水线在多个平台上运行测试以确保兼容性
构建完成后,流水线执行各种验证检查
该流水线支持在最终发布前创建预发布版本进行测试
-beta 后缀进行标记来源