0

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 任务中访问容器数据映像的内容?

4

1 回答 1

2

目前 Tekton 不支持 OpenShift 构建配置支持的图像输入:https ://docs.openshift.com/container-platform/4.2/builds/creating-build-inputs.html#image-source_creating-build-inputs

图像输入仅对变量插值有用,例如,"$(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. 将 pod 目录复制到本地目录(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-平台/4.2/builds/creating-build-inputs.html#image-source_creating-build-inputs)。Tekton 管道的唯一优势似乎是能够轻松重用任务,但是,可以通过为 OpenShift 资源创建 Operator 来实现等价。

于 2020-01-31T10:19:22.800 回答