如何从Kubernetes的一次性流程中获取文件?

时间:2018-05-17 20:27:30

标签: jenkins kubernetes jenkins-pipeline kubernetes-helm jenkins-declarative-pipeline

我有一个测试过程,它生成一个文件作为输出。

我想在构建期间启动此测试过程,将其运行完成,然后收集它生成的文件并将其复制回构建上下文。

在Kubernetes / Helm中执行此操作的正确方法是什么?

构建过程可以访问kubectlhelm CLI工具。

我要求不使用kubectl exec,因为群集设置不允许它。

一些细节:

我能够使用Pod配置一次性流程。

我设置了将输出文件存储在卷装入中的过程,该装载挂载到emptyDir卷。

我无法弄清楚如何获取输出文件。

我尝试了kubectl cp,但我无法让它工作(没有这样的文件或目录)。

我无法弄清楚如何检查已停止的容器的内容。

我无法弄清楚如何查看音量中的内容。

kubectl logs表示测试过程成功运行。该文件在容器中生成并存储在预期的位置。

快速更新:

在我的本地minikube环境中,我能够设置持久卷并将输出文件复制回主机文件系统。我将在Jenkins环境中尝试下一步。

以下是我本地(boot2docker)环境中kubectl cp的输出:

$ kubectl cp my-pod:/home/node/output . -c mycontainer
error: home/node/output no such file or directory

/home/node/output是容器中的volumeMount路径。

1 个答案:

答案 0 :(得分:1)

  

我要求不使用kubectl exec,因为群集设置不允许它。

如果没有kubectl exec命令,我可以建议这样做:

  1. 在群集内以Job运行测试。
  2. 使用NFS或SMB等共享卷存储文件。
  3. 从共享卷中获取文件,您可以将其挂载到构建系统。
  4. 此外,许多构建系统都有Artifacts存储,它可以是存储测试结果的最佳选择。