首页 > 解决方案 > 如何查看日志是来自 Java 应用程序的 Stackdriver 在 Jenkins Kubernetes 容器上运行?

问题描述

我创建了一个 Jenkins 管道,并在 GKE 上运行它(使用 Kubernetes 插件)。在其中一个步骤中,我在其中一个容器中运行 java 应用程序。应用程序正在将日志写入标准输出。我想在 Stackdriver 中查看此应用程序的日志。我怎样才能实现它?目前我无法在 Stackdriver 和 Jenkins 日志中看到这些日志。

我的管道:

podTemplate(cloud: 'kubernetes',
        yaml: """
apiVersion: v1
kind: Pod
spec:
  securityContext:
    runAsUser: 0
  containers:
  - name: maven
    image: maven:3.6.3-jdk-11
    resources:
      requests:
        cpu: "1"
        memory: "1Gi"
        ephemeral-storage: "20Mi"
      limits:
        cpu: "2"
        memory: "4Gi"
        ephemeral-storage: "1Gi"
    command:
    - cat
    tty: true
"""
) {
    node(POD_LABEL) {
        stage('Run app') {
            container('maven') {
                sh "java -jar my-app.jar &"
            }
        }
    }
}

=== 编辑 ===

我的主 Jenkins 安装在其中一个 GKE pod 上,每个 PR 验证都会触发另一个 pod,该 pod 具有带有 Java 应用程序的上述容器。看起来 jenkins 从代理正在收集日志(但由于 Java 应用程序在后台运行,因此没有将它们附加到构建日志中)。

标签: jenkinsloggingjenkins-pipelinegoogle-kubernetes-enginestackdriver

解决方案


如果您已经在 GCP 实例上运行 Jenkins,那将非常简单,直接将日志获取到 Stackdriver。

https://faun.pub/jenkins-on-google-compute-engine-611bd86e295b

您还可以将代理与 java 集成

参考:https ://medium.com/google-cloud/java-logging-on-cloud-run-with-stackdriver-9786d6fdbe17

您还应该使用Bluemedora结帐


推荐阅读