![](/img/trans.png)
[英]How to declare values in .yaml file Environment Variables and Call it in Jenkins
[英]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
使用的圖表的名稱-這就是頭盔如何組成圖表。
所以,如果您的應用程序被稱為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
),則表明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.