本文档描述了 Immich 项目的持续集成和持续部署 (CI/CD) 流水线。它详细介绍了构建、测试和部署系统不同组件的自动化工作流。有关构建系统本身的信息,请参阅构建系统。
Immich 的 CI/CD 流水线使用 GitHub Actions 自动化应用程序不同组件的测试、构建和部署。该流水线确保代码库的更改在集成前经过充分测试,并确保在适当时候自动构建和发布可部署的工件。
来源:.github/workflows/docker.yml .github/workflows/test.yml .github/workflows/cli.yml .github/workflows/build-mobile.yml .github/workflows/prepare-release.yml .github/workflows/docs-build.yml .github/workflows/docs-deploy.yml
CI/CD 流水线由不同事件触发
| 触发器 | 描述 | 相关工作流 |
|---|---|---|
| 拉取请求 | 当 PR 被打开或更新时 | test.yml, docker.yml, static_analysis.yml |
| 推送到主分支 | 当代码被推送到主分支时 | test.yml, docker.yml, build-mobile.yml |
| 发布 | 当发布新版本时 | docker.yml, cli.yml, sdk.yml |
| 手动 | 当工作流被手动触发时 | prepare-release.yml, build-mobile.yml |
流水线使用路径过滤来确定哪些组件需要测试或构建,通过仅运行必要的工作流来优化资源。
来源:.github/workflows/test.yml13-54 .github/workflows/docker.yml19-43 .github/workflows/build-mobile.yml19-36 .github/workflows/cli.yml2-13
测试流水线包含多个阶段,以确保代码质量和功能
The test.yml 工作流对不同组件运行单元测试、集成测试和端到端测试
| 组件 | 测试类型 | 描述 |
|---|---|---|
| 服务器 | 单元、集成、中型 | NestJS 服务器应用程序的测试 |
| Web | 单元 | SvelteKit Web 应用程序的测试 |
| 移动端 | 单元 | Flutter 移动应用程序的测试 |
| CLI | 单元 | 命令行界面的测试 |
| 机器学习 | 单元 | Python 机器学习服务的测试 |
| 端到端 | 端到端测试 | 跨组件集成测试 |
每个组件的测试仅在相关文件发生更改时运行,这由路径过滤决定。
来源:.github/workflows/test.yml56-408
额外的工作流对代码库执行额外的检查
来源:.github/workflows/codeql-analysis.yml .github/workflows/static_analysis.yml .github/workflows/test.yml447-562 .github/workflows/pr-require-conventional-commit.yml
The docker.yml 工作流负责构建和发布服务器和机器学习组件的 Docker 镜像。
来源:.github/workflows/docker.yml95-419
Docker 镜像根据触发事件进行不同的标记
| 事件 | 标签格式 | 示例 | 注册表 |
|---|---|---|---|
| 推送到主分支 | main | ghcr.io/immich-app/immich-server:main | 仅限 GHCR |
| 拉取请求 | pr-{number} | ghcr.io/immich-app/immich-server:pr-123 | 仅限 GHCR |
| 提交 | commit-{sha} | ghcr.io/immich-app/immich-server:commit-abc123 | 仅限 GHCR |
| 发布 | {tag}, release | ghcr.io/immich-app/immich-server:v1.2.3 | GHCR 和 Docker Hub |
对于机器学习服务,标签中会添加额外的特定变体后缀
| 变体 | 标签后缀 | 示例 |
|---|---|---|
| CPU (默认) | (无) | ghcr.io/immich-app/immich-machine-learning:main |
| CUDA | -cuda | ghcr.io/immich-app/immich-machine-learning:main-cuda |
| ROCm | -rocm | ghcr.io/immich-app/immich-machine-learning:main-rocm |
| OpenVINO | -openvino | ghcr.io/immich-app/immich-machine-learning:main-openvino |
| ArmNN | -armnn | ghcr.io/immich-app/immich-machine-learning:main-armnn |
| RKNN | -rknn | ghcr.io/immich-app/immich-machine-learning:main-rknn |
来源:.github/workflows/docker.yml269-292 .github/workflows/docker.yml447-469
CLI 组件有一个专门的工作流,用于构建和发布 CLI 包
CLI 发布为
@immich/cli)ghcr.io/immich-app/immich-cli)两者都只在发布事件时发布。
移动应用构建工作流负责构建 Android 应用程序
来源:.github/workflows/build-mobile.yml
移动构建流水线创建
这些工件被上传到 GitHub Actions,并在发布过程中使用。
发布流程由 prepare-release.yml 工作流处理,该工作流可以手动触发
来源:.github/workflows/prepare-release.yml misc/release/pump-version.sh
发布流程
文档系统有其自己的 CI/CD 流水线
来源:.github/workflows/docs-build.yml .github/workflows/docs-deploy.yml
文档流水线根据触发器部署到不同的环境
pr-{number}.docs.immich.app)main.docs.immich.app)docs.immich.app)CI/CD 流水线结合使用 GitHub 托管的运行器和自托管运行器
| 运行器 | 用于 | 备注 |
|---|---|---|
ubuntu-latest | 大多数作业 | GitHub 托管的 Linux 运行器 |
macos-14 | 移动构建 | GitHub 托管的 macOS 运行器 |
mich | 端到端测试,专用构建 | 用于硬件功能的自托管运行器 |
ubuntu-24.04-arm | ARM 构建 | GitHub 托管的 ARM 运行器 |
一些作业(如 ML Docker 构建)使用专用运行器来访问 CUDA、ROCm 或其他加速技术等硬件功能。
来源:.github/workflows/docker.yml98-141 .github/workflows/test.yml281-282 .github/workflows/build-mobile.yml43
流水线使用多种技术来优化构建时间和资源使用
来源:.github/workflows/docker.yml11-13 .github/workflows/test.yml8-10 .github/workflows/docker.yml177-179
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(6474a7)