• DevOps
  • 执行流水线后,Kubesphere判断记录在Jenkins上不存在,进而删除了执行记录,但实际上Jenkins上是有历史记录的

KubeSphere版本信息
v3.3.2。使用kk在线升级,从3.3.1升级到3.3.2

问题是什么
流水线构建,执行任务时大概率获取不到流水线执行状态,devops-jenkins报错如下:

 2023-03-14 15:17:21.823+0000 [id=110]	WARNING	i.j.b.c.s.e.ExportInterceptor$1#getValue: Failed to get "_links" from a io.jenkins.blueocean.rest.impl.pipeline.PipelineRunImpl

 io.jenkins.blueocean.commons.ServiceException$NotFoundException: Run 4 not found in organization jenkins and pipeline huawei-6-0

 	at io.jenkins.blueocean.service.embedded.rest.RunContainerImpl.get(RunContainerImpl.java:82)

 	at io.jenkins.blueocean.service.embedded.rest.RunContainerImpl.get(RunContainerImpl.java:40)

 	at io.jenkins.blueocean.service.embedded.LinkResolverImpl.resolveRun(LinkResolverImpl.java:63)

 	at io.jenkins.blueocean.service.embedded.LinkResolverImpl.resolve(LinkResolverImpl.java:42)

 	at io.jenkins.blueocean.rest.hal.LinkResolver.resolveLink(LinkResolver.java:32)

 	at io.jenkins.blueocean.service.embedded.rest.AbstractRunImpl.getLinks(AbstractRunImpl.java:358)

 	at io.jenkins.blueocean.commons.stapler.export.MethodProperty.getValue(MethodProperty.java:72)

 Caused: java.lang.reflect.InvocationTargetException

 	at io.jenkins.blueocean.commons.stapler.export.MethodProperty.getValue(MethodProperty.java:74)

 	at io.jenkins.blueocean.commons.stapler.export.ExportInterceptor$1.getValue(ExportInterceptor.java:46)

 	at io.jenkins.blueocean.commons.stapler.Export$BlueOceanExportInterceptor.getValue(Export.java:196)

 	at io.jenkins.blueocean.commons.stapler.export.Property.writeTo(Property.java:136)

 	at io.jenkins.blueocean.commons.stapler.export.Model.writeNestedObjectTo(Model.java:228)

 	at io.jenkins.blueocean.commons.stapler.export.Model.writeNestedObjectTo(Model.java:224)

 	at io.jenkins.blueocean.commons.stapler.export.Model.writeNestedObjectTo(Model.java:224)

 	at io.jenkins.blueocean.commons.stapler.export.Model.writeNestedObjectTo(Model.java:224)

 	at io.jenkins.blueocean.commons.stapler.export.Model.writeTo(Model.java:199)

 	at io.jenkins.blueocean.commons.stapler.Export.writeOne(Export.java:177)

 	at io.jenkins.blueocean.commons.stapler.Export.serveExposedBean(Export.java:168)

 	at io.jenkins.blueocean.commons.stapler.Export.doJson(Export.java:108)

 	at io.jenkins.blueocean.commons.stapler.TreeResponse$Processor$1.generateResponse(TreeResponse.java:48)

 	at org.kohsuke.stapler.HttpResponseRenderer$Default.handleHttpResponse(HttpResponseRenderer.java:124)

 	at org.kohsuke.stapler.HttpResponseRenderer$Default.generateResponse(HttpResponseRenderer.java:69)

 	at org.kohsuke.stapler.Function.renderResponse(Function.java:160)

 	at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:143)

 	at org.kohsuke.stapler.IndexDispatcher.dispatch(IndexDispatcher.java:27)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$2.doDispatch(MetaClass.java:220)

 	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$2.doDispatch(MetaClass.java:220)

 	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$2.doDispatch(MetaClass.java:220)

 	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:735)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457)

 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)

 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:694)

 	at org.kohsuke.stapler.Stapler.service(Stapler.java:240)

 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

 	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)

 	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626)

 	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:156)

 	at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:248)

 	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)

 	at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:128)

 	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)

 	at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:80)

 	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)

 	at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:60)

 	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)

 	at com.cloudbees.jenkins.support.slowrequest.SlowRequestFilter.doFilter(SlowRequestFilter.java:37)

 	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)

 	at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134)

 	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)

 	at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:125)

 	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)

 	at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:159)

 	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)

 	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)

 	at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:159)

 	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)

 	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)

 	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:92)

 	at jenkins.security.AcegiSecurityExceptionFilter.doFilter(AcegiSecurityExceptionFilter.java:52)

 	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)

 	at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:53)

 	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)

 	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)

 	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)

 	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)

 	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)

 	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)

 	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101)

 	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92)

 	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)

 	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218)

 	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)

 	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)

 	at jenkins.security.BasicHeaderProcessor.success(BasicHeaderProcessor.java:139)

 	at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:86)

 	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)

 	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)

 	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)

 	at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:62)

 	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)

 	at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:109)

 	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)

 	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)

 	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)

 	at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51)

 	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)

 	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)

 	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:85)

 	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)

 	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)

 	at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)

 	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)

 	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)

 	at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:39)

 	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)

 	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)

 	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)

 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)

 	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578)

 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

 	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)

 	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)

 	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)

 	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)

 	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)

 	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)

 	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)

 	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)

 	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)

 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)

 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

 	at org.eclipse.jetty.server.Server.handle(Server.java:516)

 	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)

 	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)

 	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)

 	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)

 	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)

 	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)

 	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)

 	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)

 	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)

 	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)

 	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)

 	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386)

 	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)

 	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)

 	at java.base/java.lang.Thread.run(Thread.java:829)

直接登陆jenkins控制台,可以看到正在执行的任务,如下,序号为12和14

但是页面上查不到,有时,页面上会一瞬间出现未执行的行,然后很快消失

很急,完全没有头绪,求大佬帮忙提供个排查思路

这是devops-controller的日志,可以看出因为系统认为构建记录不存在,因此删除了记录,但实际上Jenkins里是有构建记录的,比如图里的15号记录

从这里我猜测,当我执行一个流水线的时候,当流水线执行的接口调用成功,Kubesphere会立刻去查询流水线的状态。但如果jenkins没有立刻开始初始化流水线,卡顿或者排队,导致这个状态查不到,Kubesphere误认为这次记录不存在,因此删除了记录

像这样的任务,也是在Kubesphere上立刻被删记录了

但实际上最后执行起来了

可以看出18号记录被删除了

这是相对完整的再现

Kanade 更改标题为「执行流水线后,Kubesphere判断记录在Jenkins上不存在,进而删除了执行记录,但实际上Jenkins上是有历史记录的

卸载重装devops组件以后,重新测试效果:

并未找到规律

注:这里的任务和楼上不是一个,只是我连续执行了18次

这个环境,现在有几个 jenkins

kubectl get pod -A | grep jenkins 看下

    Kanade 这个现象,感觉是 devops-controller 没有连上 jenkins 。

    重启下 devops-controller(deployment,scale 到 0,再 scale 到 1)
    然后看下 有什么最新的 日志吗 devops-controller 的 pod 里,报错相关的。

      chilianyi 是升级Kubesphere后发生的,我把Kubesphere从3.3.1升级到了3.3.2,我没主动替换过某个image

        Kanade 出问题的 流水线,里面配置了 自动清理策略吗

        构建记录最大数量是几天。

          chilianyi 有的配置,有的没有,不过都存在问题,大多没配置

          chilianyi 反复构建取消,或者依赖容器比较大,jenkins初始化慢的时候,更容易出现这种现象

          看下 这种 job 里有对应日志吗。 这个 job 是 根据配置的流水线记录天数和数量,做自动清理动作的。看下是不是被自动清理掉了,导致页面看不到了

            chilianyi

            只有这么多日志,三个job基本一样,我的两个流水线一个配了7天10条限制,另一个无限制,上面那个连续执行18次的就是配置了7天10条的

            应该被 devops controller 给删掉了。

            devops controller 向 jenkins 中触发构建,获得 id,然后再用这个 id 去 jenkins 中查详情时,没有查到,就报错,然后触发了删除动作。

              chilianyi jenkins面板是能看到记录的,即便在Kubesphere删除之后,莫非是Kubesphere查的时候,Jenkins还没创建好记录……

              会不会和3.3.2的记录同步更新有关系

                Kanade 看你提供的这个截图,trigger 和 not exist in jenkins,delete it 相差只有几 ms。

                trigger 的时候,会触发生成一个 jenkins 的构建记录,并获取到 id
                然后再去 jenkins 中查这个 id,返回不存在,这个时间 很短,几 ms,然后触发了 delete。
                jenkins 里还能看到,只是 devops 流水线里把记录删掉了。

                  chilianyi 那要解决这个问题,是不是只能退回旧版本了,这算是个bug吗?

                    商业产品与合作咨询