我们有一个Tekton管道,我们想从它运行我们的ReadyAPI测试套件。我们使用的是SmartBear (https://hub.docker.com/r/smartbear/ready-api-soapui-testrunner)的官方图像。
映像要求将容器中的/project文件夹绑定到ReadyAPI测试项目所在的主机目录。在我们的例子中,我们的测试项目位于Tekton Workspace目录common-workspace/application-foo/tests/application-foo-readyapi-project.xml中。
当在本地(使用docker run)运行容器映像时,我只添加一个参数-v="common-workspace/application-foo/tests/":/project。我不知道如何在Tekton Task中完成这个映射。下面是整个Task定义:
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: run-readyapi-tests
spec:
workspaces:
- name: source
steps:
- name: run-test-suite
image: image-registry.openshift-image-registry.svc:5000/cicd/ready-api-soapui-testrunner:3.20.0
volumeMounts:
- name: readyapi-project
mountPath: /project
env:
- name: LICENSE_SERVER
value: "a.b.c.d:1234"
- name: COMMAND_LINE
value: "/project/application-foo-readyapi-project.xml"
volumes:
- name: readyapi-project
[some binding mechanism here]查看关于与hostPath (https://kubernetes.io/docs/concepts/storage/volumes/#hostpath)的卷绑定的官方文档,我希望我可以这样做,但由于某些原因,这是行不通的:
volumes:
- name: readyapi-project
hostPath:
path: common-workspace/application-foo/tests那么如何将volumeMounts绑定到主机上的实际目录呢?有什么线索吗?
更新:当查看OpenShift中的豆荚时,这个Task具有CreateContainerError状态。在Events视图中,这是显示的错误消息:“错误: mkdir公共工作区/应用程序失败-foo/test: mkdir公共工作区:操作不允许”。
我不明白它为什么要创建公共工作区文件夹,因为它已经存在了。当使用emptyDir卷类型,然后运行ls /workspace/source/common-workspace/application-foo/tests时,我已经验证了整个路径是否存在。这将打印出测试项目的XML文件。
发布于 2022-01-16 09:34:27
试试这个:
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: run-readyapi-tests
spec:
workspaces:
- name: source
mountPath: /project
steps:
- name: run-test-suite
image: image-registry.openshift-image-registry.svc:5000/cicd/ready-api-soapui-testrunner:3.20.0
env:
- name: LICENSE_SERVER
value: "a.b.c.d:1234"
- name: COMMAND_LINE
value: "/project/application-foo-readyapi-project.xml"您可以为任务工作区设置任意的mountPaths。默认情况是将它们挂载到/workspace/${name}中。
您不需要volumeMounts从您的初始帖子。如果您在某个地方定义了一些volumes,那么您可以使用它,但是由于您只在这里使用workspaces:它们将自动装入任务中的所有步骤容器中。
https://stackoverflow.com/questions/70698108
复制相似问题