Как я могу использовать Image PipelineResource для ввода в задачу tekton

Как описано в https://github.com/tektoncd/pipeline/blob/master/docs/resources.md, я настроил Image PipelineResource:

apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: my-data-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/default/my-data

Теперь, когда я использую указанный выше PipelineResource в качестве входных данных для задачи:

apiVersion: tekton.dev/v1alpha1
kind: Task
metadata:
  name: my-task
spec:
  inputs:
    resources:
      - name: my-data-image
        type: image
  steps:
    - name: print-info
      image: image-registry.openshift-image-registry.svc:5000/default/my-task-runner-image:latest
      imagePullPolicy: Always
      command: ["/bin/sh"]
      args:
        - "-c"
        - >
          echo "List the contents of the input image" &&
          ls -R "$(inputs.resources.my-data-image.path)"

Я не могу перечислить содержимое изображения, так как получаю сообщение об ошибке

[test : print-info] List the contents of the input image
[test : print-info] ls: cannot access '/workspace/my-data-image': No such file or directory

В документации (https://github.com/tektoncd/pipeline/blob/master/docs/resources.md) указано, что Image PipelineResource обычно используется в качестве выходных данных для задач, которые создают изображения.

Как я могу получить доступ к содержимому моего образа данных контейнера из задачи tekton?

1 ответ

В настоящее время Tekton не поддерживает входные данные изображений так, как их поддерживают конфигурации сборки OpenShift: https://docs.openshift.com/container-platform/4.2/builds/creating-build-inputs.html

Входные данные изображения полезны только для интерполяции переменных, например, "$(inputs.resources.my-image.url)", в то время как `ls "$(inputs.resources.my-image.path)"всегда будет печатать пустой контент.

Есть несколько способов получить доступ к содержимому изображения, включая:

  1. Экспорт изображения в tar: podman export $(podman create $(inputs.resources.my-image.url) --tls-verify=false) > contents.tar
  2. Скопируйте файлы из образа: docker cp $(docker create $(inputs.resources.my-image.url)):/my/image/files ./local/copy. Инструмент skopeo также может копировать файлы, но, похоже, не предлагает возможности копирования подкаталогов.
  3. Скопируйте каталог модуля в локальный каталог (https://docs.openshift.com/container-platform/4.2/nodes/containers/nodes-containers-copying-files.html): oc rsync $(inputs.resources.my-image.url): / src / home / user / source

Сказав вышесказанное, я решил просто использовать встроенные в OpenShift ресурсы BuildConfig для создания связанной сборки для моего конвейера. Разнообразия стратегий сборки, поддерживаемых OpenShift из коробки, достаточно для моих сценариев конвейера, а тот факт, что поддерживаются входные данные изображения, значительно упрощает его по сравнению с конвейерами Tekton (https://docs.openshift.com/container-platform/4.2/builds/creating-build-inputs.html). Единственное преимущество, которым обладают конвейеры Tekton, - это возможность легко повторно использовать задачи, однако эквивалент может быть достигнут путем создания операторов для ресурсов OpenShift.

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