如何在GitHub Actions中修改kustomize.yaml的Ingress域名值
在GitHub Actions中替换Kustomize配置里的域名
下面提供三种可行的实现方式,按需选择:
方法一:用sed直接文本替换(快速简单)
适合场景:域名字符串唯一,无其他地方会被误匹配的情况。
在GitHub Actions的步骤中添加以下命令,直接修改kustomize.yaml文件:
- name: 替换Kustomize中的域名 run: | sed -i 's/the.new.domain.com/${{ secrets.NEW_DOMAIN }}/g' kustomize.yaml
说明:
${{ secrets.NEW_DOMAIN }}是存储在GitHub Secrets中的新域名,也可以用环境变量${{ env.NEW_DOMAIN }}sed -i表示原地修改文件,s/旧值/新值/g是全局替换规则
方法二:用yq精准修改YAML结构(安全可靠)
适合场景:需要精准定位YAML节点,避免误改其他内容。
首先安装yq工具,再执行修改命令:
- name: 安装yq工具 uses: mikefarah/yq@v4.40.5 - name: 更新Ingress域名 run: | yq eval '.patches[0].patch |= sub("the.new.domain.com", "${{ secrets.NEW_DOMAIN }}")' -i kustomize.yaml
说明:
yq是专门处理YAML的工具,能精准定位到patches数组第一个元素的patch字段sub函数仅替换指定字符串,比sed更安全,不会破坏YAML结构
方法三:改用Kustomize Vars管理(最佳实践)
适合场景:长期维护的项目,希望遵循Kustomize的配置管理规范,避免直接修改patch内容。
- 先修改你的
kustomize.yaml,引入变量和ConfigMap生成器:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization # 定义变量,引用ConfigMap中的host值 vars: - name: INGRESS_HOST objref: kind: ConfigMap name: domain-config apiVersion: v1 fieldref: fieldpath: data.host patches: - patch: |- - op: replace path: /spec/rules/0/host value: $(INGRESS_HOST) # 用变量替代硬编码域名 target: kind: Ingress name: the_name_of_ingress # 生成存储域名的ConfigMap configMapGenerator: - name: domain-config literals: - host=the.new.domain.com
- 在GitHub Actions中用
kustomize edit命令更新ConfigMap的域名值:
- name: 更新Ingress域名变量 run: | kustomize edit set configmap domain-config --from-literal=host=${{ secrets.NEW_DOMAIN }}
说明:
- 这种方式将域名作为配置变量管理,符合Kustomize的设计理念,后续修改更灵活
- 执行
kustomize build时会自动将变量替换为实际域名
内容的提问来源于stack exchange,提问作者stack acc
相关产品推荐
相关产品推荐

