问题描述
背景:
我使用 v13.11.4 的 gitlab-ee,并且在 k8s 集群中配置和部署了 gitlab runners(helper 和 builder)。
问题:
当 gitlab 中的项目触发管道时,作业会选择一个运行器并完成作业,而在作业运行时,我想捕获这些日志并将它们作为工件上传,以便开发人员可以下载它们?
我确实知道 kubernetes 命令来获取容器的日志,但无法解决上述问题
kubectl logs -c svc-0 -n ${RUNNER_NAMESPACE} $(hostname) > svc0.log
kubectl logs -c svc-1 -n ${RUNNER_NAMESPACE} $(hostname) > svc1.log
解决方法
要获取作业的服务容器日志,请在 .gitlab-ci.yml 中使用它,如下所示
sample_job:
script:
- kubectl logs ${HOSTNAME} -n ${RUNNER_NAMESPACE} -c svc-0 > svc0.log
${HOSTNAME} 是一个 gitlab 环境变量,它给出了作业运行的 pod 名称。 ${RUNNER_NAMESPACE} 是你的 gitlab runner 部署在 k8s 中的命名空间
注意:如果您认为可能有多个容器,那么对作业的 runner pod(${HOSTNAME}) 中的所有 svc-* 容器运行 for 循环。