agentic_huge_data_base / wiki
页面 Mayan EDMS · 6.2 构建与部署管线·DeepWiki 中文全文译文

6.2 · 构建与部署管线(Build & Deployment Pipeline)

企业电子文档治理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mayan EDMS 章节6.2 状态全文译文 模块测试、发布与运维、配置治理、文档对象与元数据、安装与启动
源码线索
  • .gitlab-ci.yml
  • Makefile
  • config.env
  • docker/Makefile
  • docs/parts/troubleshooting/static_files.txt
  • mayan/apps/appearance/management/commands/appearance_prepare_static.py
  • mayan/apps/platform/templates/platform/docker/dockerfile.tmpl
  • mayan/apps/platform/templates/platform/docker/entrypoint.tmpl
  • mayan/apps/platform/templates/platform/docker/supervisord.tmpl
  • mayan/apps/platform/templates/platform/gitlab-ci.tmpl
模块标签
  • 测试、发布与运维
  • 配置治理
  • 文档对象与元数据
  • 安装与启动
  • 工作流与编排

章节正文

构建与部署管线

构建与部署管线

相关源文件

本章引用的主要源码文件:

  • .gitlab-ci.yml
  • Makefile
  • config.env
  • docker/Makefile
  • docs/parts/troubleshooting/static_files.txt
  • mayan/apps/appearance/management/commands/appearance_prepare_static.py
  • mayan/apps/platform/templates/platform/docker/dockerfile.tmpl
  • mayan/apps/platform/templates/platform/docker/entrypoint.tmpl
  • mayan/apps/platform/templates/platform/docker/supervisord.tmpl
  • mayan/apps/platform/templates/platform/gitlab-ci.tmpl
  • mayan/settings/literals.py

本文档说明了 Mayan EDMS 的自动化构建与部署管线,包括 GitLab CI/CD 集成、Docker 镜像构建、Python 包分发以及部署流程。该管线自动化了测试、构建和发布流程,可将 Python 包发布到 PyPI,将 Docker 镜像发布到 Docker Hub。

有关搭建本地开发环境的信息,请参阅开发环境搭建。有关版本管理和发布流程的详细信息,请参阅发布管理

管线架构

Mayan EDMS 的构建管线使用 GitLab CI/CD 实现,包含多个阶段,这些阶段根据分支命名规范来执行。管线处理三种主要的制品类型:Python 包、Docker 镜像和文档。

Mayan EDMS · 管线架构 · 图 1
Mayan EDMS · 管线架构 · 图 1

来源: .gitlab-ci.yml:1-10, mayan/apps/platform/templates/platform/gitlab-ci.tmpl:1-10

GitLab CI/CD 配置

管线配置由模板系统生成,并为每个阶段定义了具体的作业。主配置使用基于分支的触发器来控制不同类型构建的执行时机。

阶段定义
阶段用途作业
stage_test运行测试套件和升级测试job_postgres_testjob_sqlite_testjob_postgres_upgrade_testjob_sqlite_upgrade_test
stage_build_python构建 Python wheel 包job_python_build
stage_build_docker构建 Docker 镜像job_docker_buildjob_docker_nightlyjob_docker_testing
stage_build_documentation构建 Sphinx 文档job_documentation_build
stage_push_python发布到 PyPIjob_python_push_pypi
stage_push_docker发布到 Docker Hubjob_docker_push_majorjob_docker_push_minor
stage_push_documentation部署文档job_documentation_push
stage_deploy部署到环境job_demo_deployjob_staging_deploy

来源: .gitlab-ci.yml:1-10, mayan/apps/platform/templates/platform/gitlab-ci.tmpl:1-10

基于分支的触发器

管线使用分支命名规范来决定执行哪些作业:

Mayan EDMS · 基于分支的触发器 · 图 2
Mayan EDMS · 基于分支的触发器 · 图 2

来源: .gitlab-ci.yml:29-35, .gitlab-ci.yml:362-373

构建作业实现

Docker 镜像构建流程

Docker 构建流程采用多阶段方法,具备依赖缓存功能,并支持在测试中使用多种数据库后端。

Mayan EDMS · Docker 镜像构建流程 · 图 3
Mayan EDMS · Docker 镜像构建流程 · 图 3

来源: .gitlab-ci.yml:13-58, docker/Makefile:15-17

Python 包构建流程

Python 包使用标准的 setuptools 工作流进行构建,并生成 wheel 文件:

Mayan EDMS · Python 包构建流程 · 图 4
Mayan EDMS · Python 包构建流程 · 图 4

来源: .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 管线的命令:

Mayan EDMS · GitLab 集成命令 · 图 5
Mayan EDMS · GitLab 集成命令 · 图 5

来源: Makefile:322-327, Makefile:354-359, Makefile:368-373

配置管理

构建管线使用基于环境变量和模板的集中式配置系统:

配置来源
Mayan EDMS · 配置来源 · 图 6
Mayan EDMS · 配置来源 · 图 6

来源: config.env:1-74, mayan/settings/literals.py:1-63, Makefile:115-117

环境变量使用

管线广泛使用环境变量进行配置:

类别变量用途
Docker 注册表CI_REGISTRY_USERCI_REGISTRY_PASSWORDCI_REGISTRY_IMAGEGitLab 容器注册表认证
Docker HubDOCKER_HUB_USERNAMEDOCKER_HUB_PASSWORDDocker Hub 发布
数据库POSTGRES_DBPOSTGRES_USERPOSTGRES_PASSWORD测试数据库配置
PyPIPYPIRCPython 包发布凭证
部署DEMO_SSH_KNOWN_HOSTSTAGING_PRIVATE_KEY环境部署

来源: .gitlab-ci.yml:16, .gitlab-ci.yml:80, .gitlab-ci.yml:278

测试集成

管线包含跨多个数据库后端和升级场景的全面测试:

测试矩阵
Mayan EDMS · 测试矩阵 · 图 7
Mayan EDMS · 测试矩阵 · 图 7

来源: .gitlab-ci.yml:313-343, .gitlab-ci.yml:375-398, Makefile:16

部署管线

部署阶段处理到演示环境和预发布环境的自动化部署:

部署作业
Mayan EDMS · 部署作业 · 图 8
Mayan EDMS · 部署作业 · 图 8

来源: .gitlab-ci.yml:402-430, contrib/scripts/install/docker.sh

两个部署作业都配置了 when: manual,这意味着在执行之前需要显式批准。这为生产部署提供了安全机制,同时保持了自动化能力。

来源: .gitlab-ci.yml:415, .gitlab-ci.yml:430