我有一个应用程序需要从 GitLab CI/CD 变量注入各种配置。
Config 的结构如下,设置为 Gitlab CI/CD 变量 DEPLOYTIMECONFIG。需要在部署时将其注入到应用程序中的静态文件中,例如根目录中的“deploytimeconfig.json”。
{
"envs": [
{
"id": "Dev",
"enabled": true,
"name": "Dev",
"web": {
"baseUrl": "www.website.com",
"hhUrlApi": {
"method": "post",
"url": "www.website.com"
}
},
"dbs": [
{
"id": "1",
"server": "dbserve1r.com",
"user": "username",
"password": "pass",
},
{
"id": "2",
"server": "dbserver2.com",
"user": "username",
"password": "pass",
}
]
},
// some others envs
]
}
我可以通过执行以下操作来获取 .gitlab-ci.yml 中的文件: --set deploytimeconfig={{ DEPLOYTIMECONFIG }} \
然后在配置图中引用它:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.api.name }}
data:
deploytimeconfig.json: {{ .Values.deploytimeconfig}}
我尝试了 Helm 文档中的 toJson、toPrettyPrint 等各种方法,但似乎无法克服 JSON 解析问题,或者有时文件没有最终出现在项目中。有没有人做过类似的事情并且可以建议我应该如何处理这个问题? JSON 字符需要转义还是类似的?
在 Helm 模板级别,实现此目的的最简单方法是结合使用 YAML 块标量语法和 Helm 的
indent
函数。这将使您相当可靠地注入多行字符串,而不会出现任何特定的引用或转义问题。
data:
deploytimeconfig.json:
{{ .Values.deploytimeconfig | indent 4 }}
请注意,
.Values... | indent
行从第一列开始。 indent
值比前一行多一个缩进步骤。 (你的问题使用 4 个空格缩进,所以你会 indent 8
。)
还有一些关于如何提供文件的问题。如果您的 CI 系统可以创建该文件并将其放入图表源树中,那么您可以使用 Helm
.Files
对象 来检索它。例如,如果文件刚刚放入图表根目录中,
data:
deploytimeconfig.json:
{{ .Files.Get "deploytimeconfig.json" | indent 4 }}
您还可以让部署系统以 JSON 或 YAML 语法写出 Helm 值文件,并将此内容作为单引号或转义字符串。在这种情况下,您可以将
.Values
语法与 helm install -f
选项结合使用来提供附加值文件。如果文件是动态构建的,这可能是一种更可靠的注入方式。