
variantdev/modmod 是一款通用包管理器,旨在补充 make 和 variant 等任务运行器与构建工具。它能将 Git/S3/GCS/HTTP 中的任意文件集转换为具有托管、版本化依赖的可重用模块,可视为适用于各类项目的 vgo、npm、bundle 替代方案。
Dockerfile.tpl)自动生成配置文件,动态注入依赖版本以更新 Dockerfile 中的 Helm 版本为例:
创建模板文件:将原 Dockerfile 改造为模板 Dockerfile.tpl,使用模板变量替换硬编码版本
dockerfileFROM alpine:3.9 ARG HELM_VERSION={{ .helm_version }} ADD [***]{HELM_FILE_NAME} /tmp RUN tar -zxvf /tmp/${HELM_FILE_NAME} -C /tmp \ && mv /tmp/linux-amd64/helm /bin/helm \ && rm -rf /tmp/* \ && /bin/helm init --client-only
配置 variant.mod:定义依赖源、版本约束及文件渲染规则
yamlprovisioners: files: Dockerfile: source: Dockerfile.tpl arguments: helm_version: "{{ .helm.version }}" helm: releasesFrom: githubReleases: source: helm/helm version: "> 1.0.0"
运行 mod build:自动获取符合版本约束的最新 Helm 版本,渲染生成新的 Dockerfile
dockerfileFROM alpine:3.9 ARG HELM_VERSION=2.14.3 # 由 mod 自动更新 ADD [***]{HELM_FILE_NAME} /tmp RUN tar -zxvf /tmp/${HELM_FILE_NAME} -C /tmp \ && mv /tmp/linux-amd64/helm /bin/helm \ && rm -rf /tmp/* \ && /bin/helm init --client-only
通过定义多阶段(如开发、测试、生产),按顺序更新各阶段配置:
配置 variant.mod:定义阶段、环境及文件渲染规则
yamlstages: - name: development environments: - test - name: staging environments: - qa - stress - name: production environments: - prod provisioners: files: helmfile: path: states/helmfile.{{ .stage.environment }}.yaml source: templates/helmfile.yaml.tpl arguments: MYAPP_VERSION: "{{ .stage.dependencies.myapp.version }}" dependencies: myapp: releasesFrom: dockerImageTags: source: example.com/myorg/myapp version: "> 0.1.0"
按阶段更新配置:
mod up development --build --pull-request(生成 states/helmfile.test.yaml 并提交 PR)mod up staging --build --pull-request(生成 states/helmfile.qa.yaml 和 states/helmfile.stress.yaml)mod up production --build --pull-request(生成 states/helmfile.prod.yaml)regexpReplace 配置器通过正则表达式更新文本文件(如 Dockerfile)中的版本:
yamlprovisioners: regexpReplace: Dockerfile: from: "(FROM helmfile:)(\\S+)(\\s+)" to: "${1}{{.Dependencies.helmfile.version}}${3}" dependencies: helmfile: releasesFrom: dockerImageTags: source: quay.io/roboll/helmfile version: "> 0.94.0"
docker 可执行文件配置器管理基于 Docker 镜像的可执行文件,通过 mod exec 运行:
yamlparameters: defaults: version: "1.12.6" provisioners: executables: dockergo: platforms: - docker: command: go image: golang tag: '{{.version}}' volume: - $PWD:/work workdir: /work
运行示例:
console$ mod exec -- dockergo version go version go1.12.6 linux/amd64
{{ hasKey .Foo.Bar "mykey" }}:检查 .Foo.Bar 是否为 map 且包含键 mykey{{ trimSpace .Str }}:移除字符串 .Str 中的空格、制表符和换行符.circleci/config.ymlmanifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务