本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
提供标准化的开发工作流和持续集成管道,通过以下工具实现:
[TOC]
本镜像旨在标准化开发流程,通过容器化的pre-commit钩子和GitLab CI模板,减少开发环境配置时间,提高跨开发者机器和CI runner的可重复性。核心价值在于统一代码检查标准、自动化集成流程,以及支持多种项目类型(Python应用、Docker镜像、Python库等)的开箱即用管道。
确保已安装以下工具:
brew install bash docker pre-commit # macOS使用Homebrew # 其他系统请通过对应包管理器安装(如apt、yum等)
适用于容器化Python应用的推荐钩子配置
详细选项参见pre-commit部分。
repos: - 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部分。
include: - project: flywheel-io/tools/etc/qa-ci ref: main # 建议固定到具体版本而非main分支 file: ci/app.yml
将上述两个文件中的main引用更新为不可变版本(如具体commit SHA或tag),确保pre-commit和GitLab CI使用同步的版本:
pre-commit try-repo [***] autoupdate
pre-commit run -a # 手动运行所有钩子检查 pre-commit install # 安装git钩子,提交前自动运行检查
pre-commit钩子帮助在代码提交前识别问题,如无效YAML语法、非标准代码格式或失败的测试。统一的命令入口降低跨项目切换成本,促进代码标准化和CI自动化。
.pre-commit-config.yaml定义,推荐使用步骤1中的配置作为起点args自定义钩子行为,例如:
hooks: - id: ruff args: [--select, "PL"] # 仅检查PL规则(pylint兼容规则)
docker run -it --rm flywheel/qa-ci ruff --help
hooks: # - id: shellcheck # 注释掉以禁用shellcheck
# 添加第三方钩子(放在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)将作业分组,同阶段作业并行执行,阶段按顺序运行。
stages: - test # 运行pre-commit检查 - publish # 推送制品(Docker/Helm/Poetry/Pages) - release # 自动创建版本MR和标签 - update # 自动更新依赖和配置文件
提供三种开箱即用的管道模板,适用于不同项目类型:
适用于包含Dockerfile和Helm chart、需集成到Flywheel umbrella chart的Python应用。
配置:
include: - project: flywheel-io/tools/etc/qa-ci ref: main # 使用具体版本替代main file: ci/app.yml
适用于无应用逻辑、仅作为工具或基础镜像的Docker项目。
配置:
include: - project: flywheel-io/tools/etc/qa-ci ref: main # 使用具体版本替代main file: ci/img.yml
适用于发布到PyPI(开源)或GitLab Package Registry(私有)的Python库。
配置:
include: - project: flywheel-io/tools/etc/qa-ci ref: main # 使用具体版本替代main file: ci/lib.yml
通过包含ci/templates.yml自定义CI作业,而非使用完整管道:
include: - 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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429