Как я могу использовать Image PipelineResource для ввода в задачу Tekton? - PullRequest
0 голосов
/ 30 января 2020

Как описано в 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 Ответ

2 голосов
/ 31 января 2020

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

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

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

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

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

...