我是新手,我希望能够使用配置映射和共享环境变量将gitlab项目变量写入文件。
我有一组环境变量定义为gitlab项目变量( gitlab运行程序将它们公开为环境变量),用于每个环境(为了简洁起见,<ENV>是DEV/TEST/PROD ):
MYSQL_USER_<ENV> = "user"
MYSQL_PASSWORD_<ENV> = "pass"在掌舵图中,每个环境都有其变量的映射。例如,values..yaml包含:
envVars:
MYSQL_USER: $MYSQL_USER_<ENV>
MYSQL_PASSWORD: $MYSQL_PASSWORD_<ENV>values.yaml包含一个Ruby,它将使用这些变量:
files:
config.rb: |
mysql['username'] = ENV["MYSQL_USER"]
mysql['password'] = ENV["MYSQL_PASSWORD"]configmap.env.yaml定义:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "mychart.fullname" . }}-config-env
data:
{{- range $config_key, $config_value := .Values.envVars }}
{{ $config_key }}: {{ $config_value | quote | nindent 4 }}
{{- end }}configmap.files.yaml定义:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "mychart.fullname" . }}-config-volume
data:
{{- range $file_path, $file_content := .Values.files }}
{{ $file_path }}: |
{{ $file_content | indent 4 -}}
{{- end }}最后,配置映射的部署(这里只显示了配置映射部分,我在这里不使用秘密,因为这个问题足够长):
volumes:
- name: {{ include "mychart.fullname" . }}-config-volume
configMap:
name: {{ include "mychart.fullname" . }}-config-volume
containers:
- name: {{ .Chart.Name }}
volumeMounts:
- name: {{ include "mychart.fullname" . }}-config-volume
mountPath: /etc/my-config-dir
envFrom:
- configMapRef:
name: {{ include "mychart.fullname" . }}-config-env因此,在一句话中,工作流应该是:MYSQL_USER/PASSWORD_<ENV>保存到MYSQL_USER/PASSWORD中,然后将其写入/etc/my-config-dir/config.rb
我似乎无法使values.yaml (MYSQL_USER,MYSQL_PASSWORD)的环境变量获得项目变量(MYSQL_USER_<ENV>、MYSQL_PASSWORD_<ENV>)的值。我使用helm 3,但是{{ env "MYSQL_USER_<ENV>" }}失败了。我可以使用环境变量命名为Ruby文件的字符串内插,但是接下来我必须知道应该为每个容器创建什么样的环境变量。
我试图避免使用多个--set参数。我也不知道envsubst怎么能在这里被使用..。
任何帮助都将不胜感激,谢谢!
发布于 2020-07-14 12:17:49
所以我最终使用了envsubst
script:
- VALUES_FILE=values.${ENV}.yaml
- envsubst < ${VALUES_FILE}.env > ${VALUES_FILE}
- helm upgrade ... -f ${VALUES_FILE}https://stackoverflow.com/questions/62877126
复制相似问题