如何验证我的 buildah 容器映像实际上是在我的 Tekton Task 中创建的

问题描述

我正在我的 Kind 集群上创建 Tekton 管道。我有一个 Task,其中第一个 step 使用 buildah 构建容器映像。现在我想验证容器映像是否已实际创建。

因此,在接下来的 step 中,我尝试“查看”我的容器映像(使用 ls)。我已将 emptyDir 卷安装到 Task,我的安装路径/var/lib/containers(buildah 认将其工件放置在该位置)。我尝试在以下 ls /var/lib/containers 中执行 step,但收到 no such file or directory 响应。我猜这是因为第二个 step 发生在新容器中?但我认为这个特定的 Task 卷存在于我的所有容器中。正如你所看到的,我对它的工作原理不是很了解。

那么有什么好的方法可以验证我的容器镜像是否真的创建了?例如,我可以在 Task 完成后停止 pod 终止,以便我可以进入容器并浏览文件系统或其他内容吗?

这里是 Task 的定义:

---
apiVersion: tekton.dev/v1beta1
kind: Task
Metadata:
  name: build-and-deploy
spec:
  params:
    - name: contextDir
      default: .
    - name: destinationImage
      default: "$(outputs.resources.app-image.url)"
    - name: dockerFile
      default: Dockerfile
  resources:
    inputs:
      - name: repo
        type: git
    outputs:
      - name: app-image
        type: image
  steps:
    - name: build-image
      image: quay.io/buildah/stable
      workingDir: "/workspace/repo/$(inputs.params.contextDir)"
      command: ["buildah","bud","--layers","-f","$(inputs.params.dockerFile)","-t","$(inputs.params.destinationImage)","."]
      volumeMounts:
        - name: varlibcontainers
          mountPath: /var/lib/containers
      securityContext:
        privileged: true
        runAsUser: 0
  volumes:
    - name: varlibcontainers
      emptyDir: {}
        

解决方法

那么有没有什么好的方法可以验证我的容器镜像是否真的创建了?

您似乎创建了自定义 Buildah 任务。我建议使用 Buildah-task from Tekton Catalog,或者至少将其用作灵感

目录中的 Buildah-task 使用了一个 digestfile 是 buildah 在 push 时写的(我猜你是想推送它以便你可以部署它?)然后任务有一个 { {3}} that Task Result - 如果任何步骤失败,该步骤将显示为失败,您可以在例如仪表板或使用 cli 客户端。