You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArgoCD中从远程Values仓库读取XML文件到Helm ConfigMap?

问题描述

已配置ArgoCD应用使用两个远程仓库:Helm仓库(存放Chart模板)和Values仓库(存放配置值),当前可正常从Values仓库传递配置值,且当XML文件与Helm Chart同仓库时,能通过Helm模板生成Kubernetes ConfigMap。现在希望将XML文件移至Values仓库,询问是否可以读取该文件内容并传入ConfigMap的data字段,实现类似传递Values值的远程文件读取能力。

当前ArgoCD应用配置

project: myproject
destination:
  server: 'https://kubernetes.default.svc'
  namespace: myns
syncPolicy:
  automated:
    prune: true
  syncOptions:
    - CreateNamespace=true
sources:
  - repoURL: >-
      https://gitlab.com/myrepos/helm-repo.git
    path: helm
    targetRevision: HEAD
    helm:
      valueFiles:
        - $values/mocks/values.yaml
  - repoURL: >-
      https://gitlab.com/myrepos/values-repo.git
    targetRevision: HEAD
    ref: values

Values文件(存放于values-repo)

mocks:
  projectName: "soapui-project"

Helm ConfigMap模板(存放于helm-repo)

{{ $projectFile := printf "%s.xml" .Values.mocks.projectName  }}
{{ $projectName := .Values.mocks.projectName  }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: "{{ $projectName | lower }}"
data:
{{ ($.Files.Glob $projectFile).AsConfig | indent 1 }}

解决方案

核心限制说明

Helm的$.Files对象仅能访问当前Chart所在仓库的文件,无法直接读取Values仓库中的文件——因为ArgoCD同步时会独立拉取两个仓库,Helm模板渲染阶段只能访问主Chart仓库的文件系统。因此必须通过Values传递的方式间接获取Values仓库中的XML内容。


方法1:将XML内容作为Values多行字符串嵌入

直接在Values仓库的values.yaml中写入XML内容:

mocks:
  projectName: "soapui-project"
  projectXmlContent: |
    <?xml version="1.0" encoding="UTF-8"?>
    <soapui-project>
      <!-- 这里填入完整的XML内容 -->
    </soapui-project>

修改Helm模板,直接引用该值生成ConfigMap:

{{ $projectName := .Values.mocks.projectName  }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: "{{ $projectName | lower }}"
data:
  {{ $projectName }}.xml: |
{{ .Values.mocks.projectXmlContent | indent 4 }}

这种方式简单直接,适合内容不频繁变动的XML文件。


方法2:通过ArgoCD的values字段传递文件内容

修改ArgoCD应用配置,在Helm配置中新增values块,直接读取Values仓库中的XML文件并注入到Values中:

project: myproject
destination:
  server: 'https://kubernetes.default.svc'
  namespace: myns
syncPolicy:
  automated:
    prune: true
  syncOptions:
    - CreateNamespace=true
sources:
  - repoURL: >-
      https://gitlab.com/myrepos/helm-repo.git
    path: helm
    targetRevision: HEAD
    helm:
      valueFiles:
        - $values/mocks/values.yaml
      # 新增:读取Values仓库中的XML文件并作为Values传入
      values: |
        mocks:
          projectXmlContent: '{{ .Files.Get "mocks/soapui-project.xml" }}'
  - repoURL: >-
      https://gitlab.com/myrepos/values-repo.git
    targetRevision: HEAD
    ref: values

之后修改Helm模板的方式与方法1一致,直接引用.Values.mocks.projectXmlContent即可。若XML包含特殊字符,建议改用多行格式包裹。

内容的提问来源于stack exchange,提问作者titter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:07:04