簡體   English   中英

Jenkins X每個環境values.yaml

[英]Jenkins X per environment values.yaml

我正在使用Jenkins X,並嘗試根據要推廣到的環境通過values.yaml文件設置不同的變量。 例如,當將發行從發行版升級到生產版時,我希望我的environment-xxxx-production存儲庫中的values.yaml文件覆蓋我的項目存儲庫中的值。

根據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

我當然可以使預覽和暫存環境變量正常工作。 然而,當我推廣應用到生產環境中, env列表environment-xxxx-production不會覆蓋env列表values.yaml項目本身的內部文件。

生產values.yaml文件中的鍵必須是您在requirements.yaml使用的圖表的名稱-這就是頭盔如何組成圖表。

所以,如果您的應用程序被稱為cheeserequirements.yaml嘗試在使用此values.yaml

cheese:
  env:
  - name: MY_ENV
    value: some_production_value

值得注意的是,到今天為止,語法似乎已經改變。

使用jx create quickstart創建應用程序時,如果查看部署模板( your-app/charts/your-app/templates/deployment.yaml ),則表明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"

正如James在他的回答中所解釋的,其中“ your-app”是您的應用程序的名稱,與requirements.yaml匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM