Дженкинс X в соответствии с ценностями среды. Yaml

Я использую Jenkins X и пытаюсь установить различные переменные с помощью values.yaml файлы, основанные на среде, которую я продвигаю. Например, при продвижении релиза от постановки к производству я бы хотел values.yaml файл в моем environment-xxxx-production хранилище для переопределения значений в моем хранилище проекта.

Согласно https://github.com/jenkins-x/jx/issues/1667 этого комментария, это должно работать просто путем размещения переменных в 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-productionvalues.yaml содержит это:

env:
- name: MY_ENV
  value: some_production_value

Я, конечно, могу заставить работать переменные окружения предварительного просмотра и постановки Однако, когда я продвигаю приложение в производственной среде, env список в environment-xxxx-production не отменяет envсписок в values.yaml файл внутри самого проекта.

1 ответ

Решение

Ключ в производстве values.yaml файл должен быть именем диаграммы, которую вы используете в requirements.yaml - вот как Хелм строит графики.

так что если ваше приложение называется cheese в requirements.yaml попробуйте использовать это в values.yaml

cheese:
  env:
  - name: MY_ENV
    value: some_production_value

Стоит отметить, что на сегодняшний день синтаксис, похоже, изменился.

При создании приложения с jx create quickstart, если мы посмотрим на шаблон развертывания (your-app/charts/your-app/templates/deployment.yaml) он показывает, что раздел развертывания env заполняется следующим образом:

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

Это означает, что в values.yamlфайл, присутствующий в ваших репозиториях GitOps для постановки, производства и по умолчанию в репозитории приложения; ваши пользовательские переменные ENV должны быть добавлены как:

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

Где "ваше-приложение" - это название вашего приложения, соответствующее тому, что находится в requirements.yaml, как объяснил Джеймс в своем ответе.

Другие вопросы по тегам