我希望在运行 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]
从命令行获得的始终是一个字符串。
您可以将目标 helm
的 cat Chart.yaml
行替换为您需要使用更新文件运行的任何内容。
关于linux - 如何从命令行更新 Helm Chart.yaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56012811/