【问题标题】:Passing variables between Tekton Steps在 Tekton Steps 之间传递变量
【发布时间】:2021-10-17 14:05:02
【问题描述】:

我正在尝试实现一个基本的 Tekton CI 管道。管道所做的只是 1) 获取源代码 2) 使用新版本构建映像并将其推送到映像注册表。

图像版本由 Tekton Step 生成。图像是由另一个使用 Kaniko 的 Tekton 步骤构建的,如 here 所述。

我知道使用工作区在 Tekton 步骤之间传递变量。这意味着我可以将版本写入工作区中的文件。但是无法从下面的 Kaniko 构建步骤中的文件中找出读取此版本的方法:

  steps:
    - name: build-and-push
      image: gcr.io/kaniko-project/executor:latest
      # specifying DOCKER_CONFIG is required to allow kaniko to detect docker credential
      env:
        - name: "DOCKER_CONFIG"
          value: "/tekton/home/.docker/"
      command:
        - /kaniko/executor
      args:
        - --dockerfile=$(params.pathToDockerFile)
        - --destination=$(resources.outputs.builtImage.url):<IMAGE-VERSION-NEEDED-HERE>
        - --context=$(params.pathToContext)
        - --build-arg=BASE=alpine:3

应该有一个通用的模式来解决这个问题,但我不确定我是否在 Tekton 文档中寻找正确的位置。

谁能指点一下?

【问题讨论】:

标签: tekton


【解决方案1】:

这是为了确认我已按照@Jonas 的建议重新设计任务的步骤来解决问题。

Tekton 任务可以具有可以在其他任务中引用的输出。在撰写本文时,Tekton 步骤似乎没有此功能。

有关更多详细信息,请参阅上面@Jonas cmets 中的链接。

【讨论】:

    【解决方案2】:

    Task 中的所有步骤共享相同的Pod,因此可以访问作为emptyDir 卷实现的共享工作区:

    Volumes:
      tekton-internal-workspace:
        Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
        Medium:
        SizeLimit:  <unset>
    

    在步骤之间共享数据的一种常见方法是到/workspace 中的一个文件并在下一步中读取它。

    或者,正如@Jonas 所建议的那样,如果您使用不同的Tasks,您可以在第一个Task 中编写一个result,并将其输入到Pipeline 定义中的第二个Task 的参数中。

    以这种方式使用结果会隐式创建两个 Tasks 之间的依赖关系,因此 Tekton 控制器不会安排第二个 Task 直到第一个成功完成并且结果可用。

    【讨论】:

    • 谢谢。基于体积的方法在某些情况下有效。这里的问题是 Kaniko 构建步骤(在撰写本文时)没有提供从卷中读取文件并将其用作图像标签的方法。出于这个原因,我不得不将步骤重新设计为我的答案中描述的任务。现在问题已经解决了。
    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 2021-11-30
    • 2013-10-30
    • 2018-03-07
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多