如何获取服务容器日志并将它们作为工件上传到 gitlab

问题描述

背景: 我使用 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 循环。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...