Jenkins X每个环境值。yaml

问题描述 投票:3回答:2

我正在使用Jenkins X,并尝试根据要升级到的环境通过values.yaml文件设置不同的变量。例如,当将发行从发行版升级到生产版时,我希望values.yaml存储库中的environment-xxxx-production文件覆盖我的项目存储库中的值。

根据https://github.com/jenkins-x/jx/issues/1667#issuecomment-420901836此注释,这只需将变量放入environment-xxxx-production存储库即可。

在我的项目中的deployment.yaml示例文件。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: {{ template "fullname" . }}
  labels:
    draft: {{ default "draft-app" .Values.draft }}
    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        draft: {{ default "draft-app" .Values.draft }}
        app: {{ template "fullname" . }}
{{- if .Values.podAnnotations }}
      annotations:
{{ toYaml .Values.podAnnotations | indent 8 }}
{{- end }}
    spec:
      containers:
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        ports:
        - containerPort: {{ .Values.service.internalPort }}
{{/*
Here's the section in question.
*/}}
{{- if .Values.env }}
        env:
{{- if .Values.prBranch }}
          - name: MY_ENV
            value: "some_value"
{{- else }}
{{ toYaml .Values.env | indent 10 }}
{{- end }}
{{- end }}
        livenessProbe:
          httpGet:
            path: {{ .Values.probePath }}
            port: {{ .Values.service.internalPort }}
          initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
          periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
          successThreshold: {{ .Values.livenessProbe.successThreshold }}
          timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
        readinessProbe:
          httpGet:
            path: {{ .Values.probePath }}
            port: {{ .Values.service.internalPort }}
          periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
          successThreshold: {{ .Values.readinessProbe.successThreshold }}
          timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
        resources:
{{ toYaml .Values.resources | indent 12 }}
      terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }}

示例项目values.yaml包含此:

env:
  - name: MY_ENV
    value: "some_staging_value"

样本environment-xxxx-production values.yaml包含此内容:

env:
- name: MY_ENV
  value: some_production_value

我当然可以使预览和暂存环境变量正常工作。但是,当我将应用程序推广到生产环境时,envenvironment-xxxx-production中的列表不会覆盖env在项目本身的values.yaml文件中列出。

jenkins kubernetes-helm jenkins--x
2个回答
4
投票

生产values.yaml文件中的键必须是您在requirements.yaml中使用的图表的名称-那就是头盔如何组成图表。

因此,如果您的应用在cheese中被称为requirements.yaml,请尝试在values.yaml中使用它

cheese:
  env:
  - name: MY_ENV
    value: some_production_value

0
投票

值得一提的是,到目前为止,语法似乎已经改变。

[使用jx create quickstart创建应用程序时,如果我们查看部署模板(your-app/charts/your-app/templates/deployment.yaml),则表明部署的env部分填充如下:

        env:
{{- range $pkey, $pval := .Values.env }}
        - name: {{ $pkey }}
          value: {{ quote $pval }}
{{- end }}

这意味着,在您的GitOps存储库中存在的values.yaml文件中,用于登台和/或生产(或在应用程序存储库中使用默认值),您的自定义ENV变量应添加为:]]

my-app:
  env:
    MY_ENV_VAR: "Staging value for MY_ENV_VAR"

[其中“ my-app”是您的应用程序的名称,与requirements.yaml中的内容匹配,如James在其回答中所述。

© www.soinside.com 2019 - 2024. All rights reserved.