0

我们有一个 Tekton 管道,我们希望从中运行我们的 ReadyAPI 测试套件。我们使用来自 SmartBear 的官方镜像 ( https://hub.docker.com/r/smartbear/ready-api-soapui-testrunner )。

该镜像要求您将/project容器中的文件夹绑定到 ReadyAPI 测试项目所在的主机目录。在我们的例子中,我们的测试项目位于 TektonWorkspace目录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]

查看有关卷绑定的官方文档hostPathhttps://kubernetes.io/docs/concepts/storage/volumes/#hostpath),我希望我能做这样的事情,但这由于某种原因不起作用:

  volumes:
    - name: readyapi-project
      hostPath:
        path: common-workspace/application-foo/tests

那么如何绑定volumeMounts到主机上的实际目录呢?有什么线索吗?

更新: 在 OpenShift 中查看 pod 时,它Task有一个CreateContainerError状态。在事件视图中,这是显示的错误消息:“错误:mkdir common-workspace/application-foo/tests 失败:mkdir common-workspace: operation not allowed”

我不明白为什么它会尝试创建 common-workspace 文件夹,因为它已经存在。我已经验证了使用emptyDir卷类型时整个路径都存在,然后运行ls /workspace/source/common-workspace/application-foo/tests​​. 这将打印出测试项目的 XML 文件。

4

1 回答 1

0

尝试这个:

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"

您可以为 Tasks 工作区设置任意 mountPaths。默认是将它们挂载到/workspace/${name}.

你不需要volumeMounts你最初的帖子。你可以使用它,如果你有一些volumes定义的地方,但因为你只workspaces在这里使用:它们将自动安装在你的任务的所有步骤容器中。

于 2022-01-16T09:34:27.250 回答