【问题标题】:Is there a way to view jenkins plugin update history?有没有办法查看詹金斯插件更新历史?
【发布时间】:2019-06-07 08:23:19
【问题描述】:

在我们的 Jenkins 上更新了插件,之后 Jenkins 进入了“安全关闭”模式,阻止了我们所有的夜间计划作业。 我们不知道是谁(或“什么”)启动了更新,而且我找不到任何类型的涉及插件更新的日志。我们只知道它们的更新时间(通过实际插件*.jpi 文件上的“修改日期”)。

如果有帮助,我们正在使用 Active Directory 身份验证,以及基于角色的权限管理,所以我们实际上知道谁(普通 + 服务用户)对此拥有权限,但似乎没有人这样做,这让我想它可能是通过某种方式通过脚本或计划任务触发的。

有什么方法可以查出更新的发起者或开始的方式? 谢谢。

【问题讨论】:

    标签: jenkins jenkins-plugins


    【解决方案1】:

    我在 Catalina 日志文件中发现的唯一一点点信息。

    catalina.2019-08-07.log:07-Aug-2019 16:37:10.695 INFO [Update center installer thread [#1]] hudson.model.UpdateCenter$DownloadJob.run Starting the installation of Credentials Binding on behalf of aakoch

    我知道您在 2 个月前问过这个问题,但我也遇到了问题并找到了这个问题。所以我要为下一个人添加我的一些小信息。

    我将添加我拥有的堆栈跟踪。也许它会出现在搜索结果中。

    Loading library jenkins-library@master
    java.lang.NullPointerException
        at org.jenkinsci.plugins.workflow.libs.LibraryAdder.retrieve(LibraryAdder.java:157)
        at org.jenkinsci.plugins.workflow.libs.LibraryAdder.add(LibraryAdder.java:138)
        at org.jenkinsci.plugins.workflow.libs.LibraryDecorator$1.call(LibraryDecorator.java:125)
        at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1065)
        at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
        at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
        at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
        at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
        at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
        at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:142)
        at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:127)
        at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:561)
        at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:522)
        at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:320)
        at hudson.model.ResourceController.execute(ResourceController.java:97)
        at hudson.model.Executor.run(Executor.java:429)
    org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
    WorkflowScript: Loading libraries failed
    
    1 error
    
        at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
        at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
        at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
        at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
        at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
        at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
        at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
        at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:142)
        at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:127)
        at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:561)
        at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:522)
        at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:320)
        at hudson.model.ResourceController.execute(ResourceController.java:97)
        at hudson.model.Executor.run(Executor.java:429)
    Finished: FAILURE
    

    问题是我为库定义的信息在进行一些插件更新后被删除了。我不确定是哪一个。我刚刚重新定义了信息,我很高兴。

    【讨论】:

    • 嗨,非常感谢。在我第一次发布之前,我确实看过这些日志,但似乎我很盲目,只是忽略了那些“开始安装......”消息 - 这是我的错。如果您有兴趣,我们的日志显示一个不知名的服务用户已开始更新。长大后,我们的一个小辈坦白说:“哦,是的,我在计划任务中更改了那个用户,因为配置的那个已经过时了……任务是做什么的?我不知道”放心,他已经为此受到了极大的嘲笑。再次感谢您!
    • 哪里可以找到这样的文件?
    • @FlorianStraub 这真的取决于它的安装方式。我的是 tomcat/jenkins/logs
    【解决方案2】:

    与此同时,我们在@daily 下运行 python 脚本以将当前插件名称和版本保存在服务器上的 json 文件中:

    import os, json, base64, urllib.request, ssl, datetime, time
    
    request = urllib.request.Request("https://jenkins-server-name/pluginManager/api/json?depth=1")
    #according to https://stackoverflow.com/a/28052583/4609258 the following is ugly
    # ... but still ok if you basically access localhost, I think
    context = ssl._create_unverified_context() 
    base64string = base64.b64encode(bytes('%s:%s' % ('jenkins user name', '34 characters long api key'),'ascii'))
    request.add_header("Authorization", "Basic %s" % base64string.decode('utf-8'))
    
    with urllib.request.urlopen(request, context=context) as url:
        parsed = json.loads(url.read().decode())
        f = open(datetime.datetime.now().strftime("%Y-%m-%d_%H-%M") + "_plugins.json", "w")
        f.write(json.dumps(parsed, indent=4, sort_keys=True))
        f.close()
    

    如果有问题,可以将这些日常文件相互比较,看看什么时候发生了变化。

    【讨论】:

      猜你喜欢
      • 2012-02-23
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 2022-07-23
      • 1970-01-01
      相关资源
      最近更新 更多