linux - 如何从命令行更新 Helm Chart.yaml

标签 linux docker yaml kubernetes-helm

我希望在运行 make helm build 命令时动态更新我的 Chart.yaml 文件,特别是版本。

例如 Chart.yaml 包含

apiVersion: v1
appVersion "1.0"
description: A helm chart for so and so
name: my app
version: 0.2

我正在寻找一种运行 make helm build version=0.3 的方法,当该构建完成时,请在构建 Chart.yaml 中查看更新的版本号

据我所知,我无法将变量传递给 .yaml 文件,所以不确定这是否可行?

最佳答案

首先,您的 Chart.yaml 不是有效的 YAML,您需要在 "1.0" 之前插入一个值分隔符 (:)在第二行。

假设您的 Makefile 如下所示:

helm:
        python3 updateversion.py Chart.yaml ${version}
        cat Chart.yaml

,为您的 Python3 和 updateversion.py 安装了 ruamel.yaml:

import sys
from pathlib import Path
import ruamel.yaml

yaml_file = Path(sys.argv[1])

yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True
# uncomment and adapt next line in case defaults don't match your indentation
# yaml.indent(mapping=4, sequence=4, offset=2)

data = yaml.load(yaml_file)
version = sys.argv[2]
if isinstance(data['version'], float):
    version = float(version)
data['version'] = version

yaml.dump(data, yaml_file)

你可以运行make helm version=0.3来获得输出:

apiVersion: v1
appVersion: "1.0"
description: A helm chart for so and so
name: my app
version: 0.3

version 测试值为 float 的技巧是必要的,因为加载 YAML 时 0.2 是 float ,但 0.2.1 是一个字符串。使用 sys.argv[2] 从命令行获得的始终是一个字符串。

您可以将目标 helmcat Chart.yaml 行替换为您需要使用更新文件运行的任何内容。

关于linux - 如何从命令行更新 Helm Chart.yaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56012811/

相关文章:

arrays - 如何处理 YAML 中给出的数组项以与 Go 中的结构关联?

c - 线程中的信号处理程序

ruby-on-rails - 如何链接 Dockerfile 中的文件?

curl - Docker:无法打开端口 8080

javascript - 具有Docker卷的Node.js开发环境

ruby-on-rails - 如何在 rails 中加载这个 yml 文件?

Java 类读取 Jar 内的 Yaml

c - 带有 exec 的单进程树

linux - 在 mozjpeg 上安装 npm 时出错,权限被拒绝?

ruby - 如何在 Linux 中将命令作为 Ruby 脚本运行?