如何将 kubectl 输出 grep 到 Jenkins 变量

How to grep kubectl output to the Jenkins variable

我有 kubernetes 工作,我想在 jenkins 管道中获取他的 pod 日志。

所以我尝试将 pod 名称 grep 到 jenkins 变量,然后获取日志。

POD_NAME = sh script: "kubectl describe jobs.batch ${JOB_NAME} | grep 'Created pod' | cut -d':' -f2"

echo "${POD_NAME}"

sh "kubectl logs --follow ${POD_NAME}"

但是我在 POD_NAME 变量中得到了 null

我假设你的 jenkins 控制器或代理能够使用 kubectl 查询 kubernetes api 因为它有一个 serviceaccount 或其他形式的凭证来访问 kubernetes。

如果是这样,我建议您使用标签来识别作业创建的 pods 并查询与它们相关的任何内容。

您可以通过向 .spec.metadata.labels 部分添加标签来实现,如下所示,然后使用 kubectl 和 --selector 标志进行查询:

---
apiVersion: batch/v1
kind: Job
metadata:
  name: MYAPP
  ...
spec:
  template:
    metadata:
      ...
      labels:
        test: value
    spec:
      containers:
      - name: MYAPP
        image: python:3.7.6-alpine3.10
        ...

kubectl logs --follow --selector test=value

使用 kubectl logs --help 获取更多信息和示例。