我知道这是一个重复的问题,但是,我没有得到一个满足我的查询的答案。我正在尝试为cronjob部署创建一个掌舵图。我将舵图的名称保留为cronjob-example。
现在,当我手动运行命令helm install
或helm upgrade
时,我可以安装或更新cronjob,但是当我尝试从CICD管道做同样的事情时,它会在templates/cronjob.yaml
文件的第19行将文件YAML转换为JSON时失败。
的计划。yaml文件。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
namespace: {{ .Values.metadata.namespace }}
creationTimestamp: {{ .Values.metadata.creationTimestamp }}
name: {{ .Values.name }}
spec:
jobTemplate:
metadata:
creationTimestamp: {{ .Values.metadata.creationTimestamp }}
name: {{ .Values.name }}
spec:
template:
metadata:
creationTimestamp: {{ .Values.metadata.creationTimestamp }}
spec:
imagePullSecrets:
- name: {{ .Values.image.imagePullSecrets }}
containers:
- image: {{ .Values.image.repository }}
name: {{ .Chart.Name }}
resources: {}
restartPolicy: OnFailure
schedule: '*/1 * * * *'
status: {}
的值。yaml文件
---
metadata:
namespace: "{{K8S_NS}}"
name: "{{HELM_APP_NAME}}"
#name: "cronjob-example"
nodeLabel: agent
image:
repository: "{{CI_REGISTRY_IMAGE}}/{{CI_COMMIT_REF_SLUG}}:{{CI_COMMIT_SHA}}.{{CI_PIPELINE_IID}}"
pullPolicy: "Always"
imagePullSecrets: git-image-pull-secret-cron
creationTimestamp: null
variables:
- name: "TLS_ENV"
value: "tst"
我想知道为什么当我手动运行它时它是成功的,为什么它通过CICD管道失败。在CICD管道中,除了部署阶段之外,其他所有工作都按原样进行。在这里它失败了。当我手动安装/升级时,我所做的只是硬编码从cicd的前几个阶段获得的值。
问题在于模板中的这个位置。
- image: {{ .Values.image.repository }}
repository: "{{CI_REGISTRY_IMAGE}} /{{CI_COMMIT_REF_SLUG}}:{{CI_COMMIT_SHA}}.{{CI_PIPELINE_IID}}"
的替换值导致无效值。
正如你提到的,第19行有问题
- image: {{ .Values.image.repository }}
在本地尝试时可能会给出正确的值,并检查在CI期间传递的值是什么
repository: "{{CI_REGISTRY_IMAGE}} /{{CI_COMMIT_REF_SLUG}}:{{CI_COMMIT_SHA}}.{{CI_PIPELINE_IID}}"
如果你想调试更多,你也可以尝试
helm install --dry-run --debug
或helm template --debug
让服务器呈现你的模板,然后返回结果清单文件,这是一个很好的方法。