持续集成与持续交付管线
持续集成与持续交付管线
相关源文件
本章引用的主要源码文件:
.dockerignore.github/workflows/argilla-frontend.build-push-dev-frontend-docker.yml.github/workflows/argilla-frontend.deploy-environment.yml.github/workflows/argilla-frontend.yml.github/workflows/argilla-server.yml.github/workflows/argilla-v1.yml.github/workflows/argilla.docs.yml.github/workflows/argilla.yml.github/workflows/close-inactive-issues-bot.ymldocs/_source/_common/tabs/argilla_install_python.mddocs/_source/community/contributing.mddocs/_source/community/developer_docs.mddocs/_source/community/migration-rubrix.mddocs/_source/getting_started/installation/deployments/docker.mddocs/_source/getting_started/installation/deployments/docker_compose.mddocs/_source/getting_started/installation/deployments/python.mddocs/_source/reference/cli.mddocs/_source/reference/notebooks.rstdocs/migration-rubrix.mddocs/template.ipynb
本文档记录了 Argilla 项目中使用的持续集成和持续部署(CI/CD)管线。它解释了自动化工作流如何构建、测试和部署 Argilla 的各个组件。有关设置开发环境的信息,请参阅开发环境搭建;有关贡献代码的详细信息,请参阅贡献工作流。
概述
Argilla 使用 GitHub Actions 实现其 CI/CD 管线。这些管线自动化了各个组件的构建、测试和部署过程,确保代码质量并简化发布流程。Argilla 的每个组件(SDK、服务器、前端和文档)都有自己专用的管线,具有特定的触发条件、步骤和部署目标。
来源:.github/workflows/argilla.yml, .github/workflows/argilla-server.yml, .github/workflows/argilla-frontend.yml, .github/workflows/argilla-v1.yml, .github/workflows/argilla.docs.yml
管线组件
Argilla 的 CI/CD 系统由几个关键管线组成,每个管线处理代码库中的一个特定组件。
组件矩阵
下表显示了 Argilla 的主要组件及其对应的 CI/CD 管线:
| 组件 | 工作流文件 | 路径 | 包名 | 触发条件 |
|---|---|---|---|---|
| Python SDK | argilla.yml | argilla/ | argilla | PR (argilla/**), Push (main/develop/releases) |
| 服务器 | argilla-server.yml | argilla-server/ | argilla-server | PR (argilla-server/**), Push (main/develop/releases) |
| 前端 | argilla-frontend.yml | argilla-frontend/ | 不适用(内置于服务器) | PR (argilla-frontend/**) |
| 旧版 v1 API | argilla-v1.yml | argilla-v1/ | argilla-v1 | PR (argilla-v1/**), Push (main/develop/releases) |
| 文档 | argilla.docs.yml | docs/ | 不适用 | Push (main/develop/docs/**), 标签 |
来源:.github/workflows/argilla.yml, .github/workflows/argilla-server.yml, .github/workflows/argilla-frontend.yml, .github/workflows/argilla-v1.yml, .github/workflows/argilla.docs.yml
测试策略
Argilla 在各个组件中实施了全面的测试:
来源:.github/workflows/argilla.yml:63-68, .github/workflows/argilla-server.yml:84-91, .github/workflows/argilla-frontend.yml:40-46, .github/workflows/argilla-v1.yml:69-82
Python SDK 管线
Python SDK 管线(argilla.yml)处理核心的 Argilla 客户端库。
构建流程
来源:.github/workflows/argilla.yml:23-137
关键特性
- 矩阵测试:在 Python 3.9、3.10、3.11、3.12 和 3.13 版本上进行测试
- 依赖管理:使用 PDM(Python 依赖管理器)实现一致的依赖管理
- 集成测试:使用正在运行的 Argilla 服务器服务进行集成测试
- 制品处理:构建并上传 Python 包,供发布任务使用
- 可信发布:使用 OIDC(OpenID Connect)实现安全的 PyPI 发布
服务器管线
Argilla 服务器管线(argilla-server.yml)构建并发布服务器组件。
构建和部署流程
来源:.github/workflows/argilla-server.yml:24-202
关键特性
- 服务依赖:使用 Elasticsearch、PostgreSQL 和 Redis 服务进行测试
- 前端集成:构建前端并将其打包到服务器中
- Docker 镜像构建:创建并发布 Docker 镜像,便于部署
- 覆盖率报告:将测试覆盖率结果上传到 Codecov
- PyPI 发布:将服务器包发布到 PyPI,可通过 pip 安装
前端管线
前端管线(argilla-frontend.yml)处理 Vue.js/Nuxt 前端组件。
构建和部署流程
来源:.github/workflows/argilla-frontend.yml:19-86, .github/workflows/argilla-frontend.build-push-dev-frontend-docker.yml:40-117, .github/workflows/argilla-frontend.deploy-environment.yml:23-87
关键特性
- 质量检查:运行 Lint 和测试以确保代码质量
- PR 环境:为拉取请求构建和部署预览环境
- Docker 集成:创建开发 Docker 镜像用于测试
- 云部署:部署到 Google Cloud Run 用于 PR 预览
- PR 反馈:自动在 PR 中评论部署 URL
文档管线
文档管线(argilla.docs.yml)处理 Argilla 文档的构建和发布。
构建和部署流程
来源:.github/workflows/argilla.docs.yml:26-109
关键特性
- 版本化文档:使用 mike 部署版本化文档
- 分支特定部署:根据分支或标签设置不同的部署目标
- 默认版本:将最新版本设置为默认版本
- PR 预览:为 PR 分支创建隐藏的文档版本
- PR 反馈:在 PR 中添加包含文档预览链接的评论
旧版 v1 API 管线
旧版 v1 API 管线(argilla-v1.yml)处理 v1 API 的兼容层。
构建流程
来源:.github/workflows/argilla-v1.yml:20-146
关键特性
- Conda 环境:使用 conda 进行环境管理
- 兼容性测试:使用较新版本的 pandas 和 pydantic 进行测试
- 缓存:对 conda 环境和 pip 依赖实现缓存
- PyPI 发布:将包发布到 PyPI,可通过 pip 安装
部署目标和制品
Argilla 的 CI/CD 管线发布到多个部署目标,使软件可以通过不同的分发渠道获取。
来源:.github/workflows/argilla.yml:79-137, .github/workflows/argilla-server.yml:116-202, .github/workflows/argilla-v1.yml:84-146, .github/workflows/argilla.docs.yml:62-108
包发布策略
下表描述了不同制品的发布策略:
| 组件 | 制品 | 目标 | 条件 |
|---|---|---|---|
| Python SDK | argilla-*.whl | TestPyPI | main 分支或工作流调度 |
| Python SDK | argilla-*.whl | PyPI | 仅 main 分支 |
| 服务器 | argilla-server-*.whl | TestPyPI | main 分支或工作流调度 |
| 服务器 | argilla-server-*.whl | PyPI | 仅 main 分支 |
| 服务器 | Docker 镜像 | Docker Hub | main、develop、releases 分支 |
| 前端 | 开发 Docker 镜像 | Google Cloud Run | PR 环境 |
| v1 API | argilla-v1-*.whl | TestPyPI | main 分支或工作流调度 |
| v1 API | argilla-v1-*.whl | PyPI | 仅 main 分支 |
| 文档 | HTML 文件 | GitHub Pages | 基于分支/标签 |
来源:.github/workflows/argilla.yml:125-137, .github/workflows/argilla-server.yml:189-202, .github/workflows/argilla-v1.yml:133-146, .github/workflows/argilla.docs.yml:62-101
贡献和开发工作流
CI/CD 管线与 Argilla 的贡献工作流集成,以确保代码质量并简化发布流程。
来源:docs/_source/community/contributing.md:36-212
拉取请求工作流
当你向 Argilla 提交拉取请求时:
- GitHub Actions 会根据修改的文件自动运行相应的 CI 管线
- 对于前端更改,会部署一个预览环境
- 测试结果和状态检查会报告回 PR
- 维护者评审更改,并可能要求修改
- 批准并合并后,CD 管线会将更改部署到适当的目标
分支策略
| 分支类型 | 命名约定 | 基础分支 | 目的 |
|---|---|---|---|
| 功能 | feature/... | develop | 新功能 |
| 错误修复 | bug/... | develop | 修复问题 |
| 文档 | docs/... | main | 更新文档 |
| 发布 | releases/... | develop | 准备发布 |
来源:docs/_source/community/contributing.md:94-108
总结
Argilla 的 CI/CD 管线自动化了平台各个组件的构建、测试和部署过程。这些管线确保了代码质量,为贡献者提供快速反馈,并简化了发布流程。通过理解这些管线,开发者可以更有效地为 Argilla 项目做出贡献,并了解他们的更改是如何被测试和部署的。