我正在尝试实现一个基本的Tekton CI管道。管道所做的一切就是: 1)获取源代码;2)构建一个新版本的镜像,并将其推送到镜像注册表。
镜像版本由Tekton步骤生成。镜像是由另一个使用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文档中找到了正确的位置。
有谁能提供一些建议吗?
发布于 2021-10-21 20:03:04
这是为了确认我按照@Jonas的建议重新设计了任务的步骤,从而解决了这个问题。
Tekton任务可以有输出,这些输出可以在其他任务中引用。在撰写本文时,Tekton steps似乎还没有这个特性。
有关更多详细信息,请参阅上面@Jonas评论中的链接。
发布于 2021-11-08 10:03:30
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,直到第一个are成功完成并且结果可用。
https://stackoverflow.com/questions/69605094
复制相似问题