У меня есть такой файл yaml для определения триггера `
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerTemplate
metadata:
name: app-template-pr-deploy
spec:
params:
- name: target-branch
- name: commit
- name: actor
- name: pull-request-number
- name: namespace
resourcetemplates:
- apiVersion: tekton.dev/v1alpha1
kind: PipelineRun
metadata:
generateName: app-pr-$(tt.params.actor)-
labels:
actor: $(tt.params.actor)
spec:
serviceAccountName: myaccount
pipelineRef:
name: app-pr-deploy
podTemplate:
nodeSelector:
location: somelocation
params:
- name: branch
value: $(tt.params.target-branch)
** - name: namespace
value: $(tt.params.target-branch)**
- name: commit
value: $(tt.params.commit)
- name: pull-request-number
value: $(tt.params.pull-request-number)
resources:
- name: app-cluster
resourceRef:
name: app-location-cluster
` Проблема в том, что иногда целевая ветвь похожа на «интеграцию/функцию», а затем пространство имен недействительно. Я хотел бы проверить, есть ли в значении недопустимый символ, и заменить его, если он есть.
Любой способ сделать это?
Не нашел никакого ценного способа сделать это, кроме создания задачи для выполнения этого через сценарий оболочки позже в конвейере.
Это то, что вы можете сделать из своего EventListener, используя что-то вроде:
apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:
name: xx
spec:
triggers:
- name: demo
interceptors:
- name: addvar
ref:
name: cel
params:
- name: overlays
value:
- key: branch_name
expression: "body.ref.split('/')[2]"
bindings:
- ref: your-triggerbinding
template:
ref: your-triggertemplate
Затем из вашего TriggerTemplate вы должны добавить параметр «branch_name», проанализированный из вашего EventListener.
Примечание. Полезная нагрузка из уведомления git может отличаться. Пример выше действителен с github. Преобразование remote/origin/master в master или abc/def/ghi/jkl в ghi.
Я создал отдельную задачу, которая выполняет всю необходимую мне магию и выводит допустимое имя пространства имен в другую переменную. Затем вместо использования переменной пространства имен я использую действительное пространство имен на всем протяжении конвейера.
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: validate-namespace-task-v1
spec:
description: >-
This task will validate namespaces
params:
- name: namespace
type: string
default: undefined
results:
- name: valid-namespace
description: this should be a valid namespace
steps:
- name: triage-validate-namespace
image: some-image:0.0.1
script: |
#!/bin/bash
echo -n "$(params.namespace)" | sed "s/[^[:alnum:]-]/-/g" | tr '[:upper:]' '[:lower:]'| tee $(results.valid-namespace.path)
Спасибо
@SYN, я согласен с вашим подходом, дайте мне знать, как это сделать, потому что я не смог найти правильное решение.
Запуск модуля для замены строк действительно упускает из виду перехватчики, цел, ... или тектон в целом. Конечно, вы можете быть более знакомы с sed. Но стоит ли замедлять все ваши конвейеры, планировать под, ждать загрузки изображения, запускать вашу команду и получать ее результат? Разве вы не можете сделать это с помощью CEL за долю секунды?