构建与部署管线
构建与部署管线
相关源文件
本章引用的主要源码文件:
.gitlab-ci.ymlMakefileconfig.envdocker/Makefiledocs/parts/troubleshooting/static_files.txtmayan/apps/appearance/management/commands/appearance_prepare_static.pymayan/apps/platform/templates/platform/docker/dockerfile.tmplmayan/apps/platform/templates/platform/docker/entrypoint.tmplmayan/apps/platform/templates/platform/docker/supervisord.tmplmayan/apps/platform/templates/platform/gitlab-ci.tmplmayan/settings/literals.py
本文档说明了 Mayan EDMS 的自动化构建与部署管线,包括 GitLab CI/CD 集成、Docker 镜像构建、Python 包分发以及部署流程。该管线自动化了测试、构建和发布流程,可将 Python 包发布到 PyPI,将 Docker 镜像发布到 Docker Hub。
有关搭建本地开发环境的信息,请参阅开发环境搭建。有关版本管理和发布流程的详细信息,请参阅发布管理。
管线架构
Mayan EDMS 的构建管线使用 GitLab CI/CD 实现,包含多个阶段,这些阶段根据分支命名规范来执行。管线处理三种主要的制品类型:Python 包、Docker 镜像和文档。
来源: .gitlab-ci.yml:1-10, mayan/apps/platform/templates/platform/gitlab-ci.tmpl:1-10
GitLab CI/CD 配置
管线配置由模板系统生成,并为每个阶段定义了具体的作业。主配置使用基于分支的触发器来控制不同类型构建的执行时机。
阶段定义
| 阶段 | 用途 | 作业 |
|---|---|---|
stage_test | 运行测试套件和升级测试 | job_postgres_test、job_sqlite_test、job_postgres_upgrade_test、job_sqlite_upgrade_test |
stage_build_python | 构建 Python wheel 包 | job_python_build |
stage_build_docker | 构建 Docker 镜像 | job_docker_build、job_docker_nightly、job_docker_testing |
stage_build_documentation | 构建 Sphinx 文档 | job_documentation_build |
stage_push_python | 发布到 PyPI | job_python_push_pypi |
stage_push_docker | 发布到 Docker Hub | job_docker_push_major、job_docker_push_minor |
stage_push_documentation | 部署文档 | job_documentation_push |
stage_deploy | 部署到环境 | job_demo_deploy、job_staging_deploy |
来源: .gitlab-ci.yml:1-10, mayan/apps/platform/templates/platform/gitlab-ci.tmpl:1-10
基于分支的触发器
管线使用分支命名规范来决定执行哪些作业:
来源: .gitlab-ci.yml:29-35, .gitlab-ci.yml:362-373
构建作业实现
Docker 镜像构建流程
Docker 构建流程采用多阶段方法,具备依赖缓存功能,并支持在测试中使用多种数据库后端。
来源: .gitlab-ci.yml:13-58, docker/Makefile:15-17
Python 包构建流程
Python 包使用标准的 setuptools 工作流进行构建,并生成 wheel 文件:
来源: .gitlab-ci.yml:233-257, .gitlab-ci.yml:259-280, Makefile:201-204
本地开发集成
管线通过 Makefile 目标与本地开发工作流集成,这些目标镜像了 CI/CD 流程:
本地构建目标
| 目标 | 用途 | 对应的 CI 作业 |
|---|---|---|
make test-all | 运行完整测试套件 | job_postgres_test |
make python-wheel | 构建 Python 包 | job_python_build |
make docker-build | 构建 Docker 镜像 | job_docker_build |
make docs-html | 构建文档 | job_documentation_build |
来源: Makefile:58-59, Makefile:201-204, docker/Makefile:15-17
GitLab 集成命令
Makefile 提供了触发 GitLab CI 管线的命令:
来源: Makefile:322-327, Makefile:354-359, Makefile:368-373
配置管理
构建管线使用基于环境变量和模板的集中式配置系统:
配置来源
来源: config.env:1-74, mayan/settings/literals.py:1-63, Makefile:115-117
环境变量使用
管线广泛使用环境变量进行配置:
| 类别 | 变量 | 用途 |
|---|---|---|
| Docker 注册表 | CI_REGISTRY_USER、CI_REGISTRY_PASSWORD、CI_REGISTRY_IMAGE | GitLab 容器注册表认证 |
| Docker Hub | DOCKER_HUB_USERNAME、DOCKER_HUB_PASSWORD | Docker Hub 发布 |
| 数据库 | POSTGRES_DB、POSTGRES_USER、POSTGRES_PASSWORD | 测试数据库配置 |
| PyPI | PYPIRC | Python 包发布凭证 |
| 部署 | DEMO_SSH_KNOWN_HOST、STAGING_PRIVATE_KEY | 环境部署 |
来源: .gitlab-ci.yml:16, .gitlab-ci.yml:80, .gitlab-ci.yml:278
测试集成
管线包含跨多个数据库后端和升级场景的全面测试:
测试矩阵
来源: .gitlab-ci.yml:313-343, .gitlab-ci.yml:375-398, Makefile:16
部署管线
部署阶段处理到演示环境和预发布环境的自动化部署:
部署作业
来源: .gitlab-ci.yml:402-430, contrib/scripts/install/docker.sh
两个部署作业都配置了 when: manual,这意味着在执行之前需要显式批准。这为生产部署提供了安全机制,同时保持了自动化能力。
来源: .gitlab-ci.yml:415, .gitlab-ci.yml:430