Skip to content

为 GitOps 生成清单

在 GitOps 中,HelmSharp 的职责止于确定性的 YAML。仓库工作流负责创建提交或 PR;HelmSharp 不应再将同一份清单直接提交给集群。

csharp
var chart = await HelmChartLoader.LoadAsync(chartPath, cancellationToken);
var values = await HelmValues.BuildAsync(
    chart,
    valuesFiles: [environmentValuesPath],
    valuesContent: null,
    setValues: new Dictionary<string, string>
    {
        ["image.tag"] = buildVersion
    },
    setFileValues: null,
    setStringValues: null,
    setJsonValues: null,
    cancellationToken: cancellationToken);

var renderer = new HelmTemplateRenderer(
    chart,
    releaseName: applicationName,
    releaseNamespace: targetNamespace,
    values: values,
    kubeVersion: targetKubeVersion,
    apiVersions: targetApiVersions,
    isUpgrade: false);

var manifest = renderer.Render();
await File.WriteAllTextAsync(outputPath, manifest, cancellationToken);

将 Chart 版本、values 文件 revision、镜像标签、Kubernetes 版本和自定义 API 版本随生成文件一起提交。这些输入比渲染后的 YAML 更能解释一次 diff。

如果仓库要求每个资源一个文件或要求不同顺序,请把它做成明确的后处理步骤,并独立测试。不要依赖部署控制器去猜测这个文件由哪个模板引擎生成。

只有同一个服务也拥有直接变更集群的职责时,才使用 release 工作流。纯 GitOps 架构中,渲染加仓库自动化是更安全的边界。

基于 MIT License 发布。