有没有办法查看 jenkins 插件更新历史?
Is there a way to view jenkins plugin update history?
在我们的 Jenkins 上更新了插件,之后 Jenkins 进入了 "safe-shutdown" 模式,阻止了我们所有的夜间计划作业。
我们不知道是谁(或 "what")启动了更新,而且我找不到任何涉及插件更新的日志。我们所知道的只是它们更新的时间(通过实际插件 *.jpi
文件上的 "Date modified")。
如果有帮助的话,我们正在使用 Active Directory 身份验证和基于角色的权限管理,所以我们实际上知道谁(普通用户 + 服务用户)对此有权限,但似乎没有人这样做过,这使得我认为它可能是通过脚本或计划任务以某种方式触发的。
有什么方法可以查明是谁启动了更新或更新是如何启动的?
谢谢
我唯一找到一点点信息的地方是 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.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
问题是我为库定义的信息在执行 一些 插件更新后被删除了。我不确定是哪一个。我刚刚重新定义了信息,一切顺利。
同时我们有一个工作运行 @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 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()
如果有问题,可以将这些日常文件相互比较,看看什么时候发生了变化。
在我们的 Jenkins 上更新了插件,之后 Jenkins 进入了 "safe-shutdown" 模式,阻止了我们所有的夜间计划作业。
我们不知道是谁(或 "what")启动了更新,而且我找不到任何涉及插件更新的日志。我们所知道的只是它们更新的时间(通过实际插件 *.jpi
文件上的 "Date modified")。
如果有帮助的话,我们正在使用 Active Directory 身份验证和基于角色的权限管理,所以我们实际上知道谁(普通用户 + 服务用户)对此有权限,但似乎没有人这样做过,这使得我认为它可能是通过脚本或计划任务以某种方式触发的。
有什么方法可以查明是谁启动了更新或更新是如何启动的? 谢谢
我唯一找到一点点信息的地方是 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.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
问题是我为库定义的信息在执行 一些 插件更新后被删除了。我不确定是哪一个。我刚刚重新定义了信息,一切顺利。
同时我们有一个工作运行 @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 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()
如果有问题,可以将这些日常文件相互比较,看看什么时候发生了变化。