如何将 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
获取更多信息和示例。
我有 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
获取更多信息和示例。