【问题标题】:How to capture the Jenkins startup Log如何捕获 Jenkins 启动日志
【发布时间】:2016-11-04 11:20:56
【问题描述】:

我正在尝试捕获 Jenkins 启动脚本的输出,但我得到的只是一个空输出。

Jenkins的输出出现在终端

#!/bin/bash
function sendNotificationOnSlack() {
    curl -X POST ...
}
export -f sendNotificationOnSlack
java -Dhudson.DNSMultiCast.disabled=true -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpPort=3999 | awk '/Jenkins is fully up and running/ {system("bash -c sendNotificationOnSlack")}'

我什至尝试捕获 TTY 的输出,但显示为空

#!/bin/bash
currentTTY=$(tty)
echo $currentTTY
function sendNotificationOnSlack() {
    curl -X POST ...
}
export -f sendNotificationOnSlack
java -Dhudson.DNSMultiCast.disabled=true -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpPort=3999
tail -f $currentTTY | awk '/Jenkins is fully up and running/ {system("bash -c sendNotificationOnSlack")}'

我试图到处搜索,但找不到 jenkins.log 文件,有人有什么建议吗?

【问题讨论】:

  • 我不完全确定这个问题,但如果你必须捕获输出,也许你应该让 Jenkins 在一个进程中生成并从另一个进程中捕获日志。也就是说,也许你应该tee 输出like so 到文件并从那里处理,删除管道到awkawk可以用在tee写的文件上
  • 另外,我假设您不希望日志落入/var/log/jenkins/jenkins.log 对吗?
  • @alok 感谢您的回复。问题是输出没有被捕获,即使管道awk 显示在 shell 上(一个没有重定向但仍然指向同一个地方的标志)。我已经检查了/var/log/jenkins/,文件夹是空的
  • 当输出通过管道传输到 awk 时,它只是标准输出。如果您确定 Jenkins/Java 进程已经生成,您可以使用2>&1 重试运行以将 stderr 重定向到 stdout 并将其重定向到您的 awk。我这样说是因为大多数 Java 服务器在 stderr 或 Java 术语中吐出日志:System.err

标签: bash shell jenkins


【解决方案1】:

创建以下 groovy 文件:$JENKINS_HOME/init.groovy.d/extra-logging.groovy

重启 Jenkins 并检查目录 $JENKINS_HOME/logs/

import java.util.logging.ConsoleHandler
import java.util.logging.FileHandler
import java.util.logging.SimpleFormatter
import java.util.logging.LogManager
import jenkins.model.Jenkins

def logsDir = new File(Jenkins.instance.rootDir, "logs")

if(!logsDir.exists()){
    println "--> creating log dir";
    logsDir.mkdirs();
}

def loggerWinstone = LogManager.getLogManager().getLogger("");
FileHandler handlerWinstone = new FileHandler(logsDir.absolutePath + "/jenkins-winstone.log", 1024 * 1024, 10, true);

handlerWinstone.setFormatter(new SimpleFormatter());
loggerWinstone.addHandler (new ConsoleHandler());
loggerWinstone.addHandler(handlerWinstone);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多