提供标准化的开发工作流和持续集成管道,通过以下工具实现:
[TOC]
本镜像旨在标准化开发流程,通过容器化的pre-commit钩子和GitLab CI模板,减少开发环境配置时间,提高跨开发者机器和CI runner的可重复性。核心价值在于统一代码检查标准、自动化集成流程,以及支持多种项目类型(Python应用、Docker镜像、Python库等)的开箱即用管道。
确保已安装以下工具:
bashbrew install bash docker pre-commit # macOS使用Homebrew # 其他系统请通过对应包管理器安装(如apt、yum等)
适用于容器化Python应用的推荐钩子配置
详细选项参见pre-commit部分。
yamlrepos: - repo: [***] rev: main # 建议固定到具体版本而非main分支 hooks: - id: eolfix # 修复行尾格式 - id: hadolint # Dockerfile检查 - id: helmcheck # Helm chart检查 - id: jsonlint # JSON文件检查 - id: linkcheck # 链接有效性检查 - id: markdownlint # Markdown格式检查 - id: poetry_export # Poetry依赖导出 - id: ruff # Python代码静态分析 - id: ruff_format # Python代码格式化 - id: ruff_tests # Python测试代码静态分析 - id: shellcheck # Shell脚本检查 - id: yamllint # YAML文件检查
适用于容器化Python应用的推荐CI配置
详细选项参见GitLab CI部分。
yamlinclude: - project: flywheel-io/tools/etc/qa-ci ref: main # 建议固定到具体版本而非main分支 file: ci/app.yml
将上述两个文件中的main引用更新为不可变版本(如具体commit SHA或tag),确保pre-commit和GitLab CI使用同步的版本:
bashpre-commit try-repo [***] autoupdate
bashpre-commit run -a # 手动运行所有钩子检查 pre-commit install # 安装git钩子,提交前自动运行检查
pre-commit钩子帮助在代码提交前识别问题,如无效YAML语法、非标准代码格式或失败的测试。统一的命令入口降低跨项目切换成本,促进代码标准化和CI自动化。
.pre-commit-config.yaml定义,推荐使用步骤1中的配置作为起点args自定义钩子行为,例如:
yamlhooks: - id: ruff args: [--select, "PL"] # 仅检查PL规则(pylint兼容规则)
bashdocker run -it --rm flywheel/qa-ci ruff --help
yamlhooks: # - id: shellcheck # 注释掉以禁用shellcheck
yaml# 添加第三方钩子(放在qa-ci钩子之后) - repo: [***] rev: v4.3.0 hooks: - id: trailing-whitespace # 移除行尾空格
helmcheck)所有钩子均容器化,详细配置可参见.pre-commit-hooks.yaml。部分钩子可能修改文件(如格式化工具),此时需提交修改后重新运行。
修复文本文件的行尾,强制使用LF(Unix风格)并确保文件末尾有且仅有一个LF。
链接:scripts/eolfix.py
使用hadolint检查Dockerfile是否符合最佳实践,内置shellcheck检查RUN指令中的shell脚本。
链接:
通过自定义脚本helmcheck.sh对Helm chart进行文档生成、 lint、测试和安全扫描:
测试值文件:放置于helm/<项目>/tests/(如helm/my-app/tests/test_nodeport.yaml),无自定义测试时使用默认值。
链接:
检查JSON文件语法、缩进和风格,自动格式化.json文件为2空格缩进。
链接:jsonlint
通过自定义脚本linkcheck.py检查文本文件中的无效链接:
localhost)、.local/.test域名及内部测试域名--ignore参数排除特定链接响应码处理:
2xx(成功)、401(未授权)、403(禁止访问)视为有效503时视为有效链接:scripts/linkcheck.py
检查Markdown文件的语法、行长度和风格,自动格式化.md文件。默认配置:
<br/>)自定义配置需创建.markdownlint-cli2.yaml文件。
链接:
将Python依赖从pyproject.toml导出为requirements.txt格式:
requirements.txtall extras) → requirements-dev.txt要求:项目需使用poetry管理依赖;如有extras,必须包含all extras。
链接:
Python静态分析工具,替代isort(导入排序)、pylint(代码质量)和pydocstyle(文档字符串)。
链接:
使用ruff格式化Python代码,统一空格和风格(如缩进、换行)。
链接:ruff format
针对Python测试代码的ruff检查,使用较宽松的默认规则。
Shell脚本静态分析工具,检查语法错误、最佳实践和潜在问题。
链接:
检查YAML文件语法、缩进和风格,自动格式化.yaml文件为2空格缩进,强制最大行长度88。
链接:
GitLab CI通过阶段(stages)将作业分组,同阶段作业并行执行,阶段按顺序运行。
yamlstages: - test # 运行pre-commit检查 - publish # 推送制品(Docker/Helm/Poetry/Pages) - release # 自动创建版本MR和标签 - update # 自动更新依赖和配置文件
提供三种开箱即用的管道模板,适用于不同项目类型:
适用于包含Dockerfile和Helm chart、需集成到Flywheel umbrella chart的Python应用。
配置:
yamlinclude: - project: flywheel-io/tools/etc/qa-ci ref: main # 使用具体版本替代main file: ci/app.yml
适用于无应用逻辑、仅作为工具或基础镜像的Docker项目。
配置:
yamlinclude: - project: flywheel-io/tools/etc/qa-ci ref: main # 使用具体版本替代main file: ci/img.yml
适用于发布到PyPI(开源)或GitLab Package Registry(私有)的Python库。
配置:
yamlinclude: - project: flywheel-io/tools/etc/qa-ci ref: main # 使用具体版本替代main file: ci/lib.yml
通过包含ci/templates.yml自定义CI作业,而非使用完整管道:
yamlinclude: - project: flywheel-io/tools/etc/qa-ci ref: main file: ci/templates.yml # 示例:仅运行Docker构建作业 build:docker: extends: .build:docker
功能:构建Docker镜像并推送到GitLab容器 registry,标签为$CI_REGISTRY_IMAGE:$CI_PIPELINE_ID
触发条件:存在Dockerfile时,在MR、main分支提交、标签推送时运行
前提:项目需启用容器 registry(设置路径:General > Visibility, project features, permissions)
功能:运行.pre-commit-config.yaml中定义的所有钩子,支持pytest覆盖率报告
触发条件:所有分支和标签推送时运行
功能:拉取GitLab registry中的构建镜像,重新标记并推送到Docker Hub
触发条件:存在Dockerfile时,在MR、main分支提交、标签推送时运行
标签规则:
| 触发源 | 标签格式 | 示例 | 类型 |
|---|---|---|---|
| MR | <分支名> | FLYW-123-feat | 滚动版本 |
| main | latest | latest | 滚动版本 |
| main | <分支名>.<SHA> | main.d34db33f | 不可变版本 |
| 标签 | <标签名> | 1.2.3 | 不可变版本 |
配置变量:
| 变量名 | 默认值 | 描述 |
|---|---|---|
DOCKER_FILE | Dockerfile | Dockerfile文件名 |
DOCKER_IMAGE | flywheel/<项目名> | Docker Hub镜像名 |
功能:构建Helm chart并推送到Flywheel ChartMuseum
触发条件:存在helm/*/Chart.yaml时,在MR、main分支提交、标签推送时运行
版本规则:
| 触发源 | 版本格式 | 示例 | 类型 |
|---|---|---|---|
| MR | <当前版本>-<分支名> | 1.2.3-FLYW-123-feat | 滚动版本 |
| main | <当前版本>-latest | 1.2.3-latest | 滚动版本 |
| main | <当前版本>-<分支名>.<日期>.<构建号>+<SHA> | 1.2.3-main.20220101.456+d34db33f | 不可变版本 |
| 标签 | <标签名> | 1.2.3 | 不可变版本 |
配置变量:
| 变量名 | 默认值 | 描述 |
|---|---|---|
GIT_DEPTH | 100 | 获取版本历史的提交数量(用于确定<当前版本>) |
功能:将public/目录中的静态HTML文档发布到GitLab Pages
触发条件:public/目录存在时,在main分支提交和标签推送时运行
功能:将Python库发布到PyPI(需配置PyPI凭证)
功能:创建release-X.Y.Z分支和MR,自动更新pyproject.toml、Helm chart等文件中的版本号
触发条件:手动触发管道时,设置RELEASE=X.Y.Z变量(X.Y.Z为目标版本)
MR内容:包含基于上次版本以来合并的MR生成的变更日志,以及引用的JIRA工单列表
配置变量:
| 变量名 | 默认值 | 描述 |
|---|---|---|
FW_COMPONENT | "" | 设置为true以启用umbrella版本同步 |
功能:创建带注释的Git标签
触发条件:release-X.Y.Z分支合并到main或热修复分支时运行
效果:触发后续制品发布管道
功能:创建update-repo分支和MR,自动更新项目依赖和配置文件
触发条件:设置UPDATE=true时运行(建议通过定时管道每2-4周运行一次,如0 0 * * sun%4表示每4个周日)
更新文件:
| 文件路径 | 描述 |
|---|---|
Dockerfile | 更新FROM中的基础镜像版本 |
pyproject.toml | 更新构建系统依赖,放宽^0.X版本约束 |
poetry.lock | 根据pyproject.toml更新依赖锁文件 |
requirements.txt | 更新导出的依赖文件 |
.pre-commit-config.yaml | 更新pre-commit仓库引用 |
.gitlab-ci.yml | 更新GitLab CI模板引用 |
配置变量:
| 变量名 | 默认值 | 描述 |
|---|---|---|
UPDATE_SKIP | "" | 空格分隔的不更新文件列表(如"Dockerfile pyproject.toml") |
[![MIT]([***]
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429