问题描述
詹金斯 2.176.4-3滚动
成绩 4.3.1
问题区域:并行运行给定的单个 Gradle任务(或者可以是任何简单的动作)和,尤其是在运行基于的管道的并发运行时
Issue area: Parallel run of a given single Gradle task (or it could be any simple action) and especially when running concurrent runs of Jenkinsfile based pipelines
我突然在Jenkins日志页面中收到此错误,以前从未见过此错误(在Jenkins中也没有发现此错误的stackoverflow帖子).
All the sudden I got this error in Jenkins log page, never seen this error before (found no stackoverflow posts either for this error in Jenkins).
错误:: java.lang.IllegalArgumentException:最后一个单元的有效位不足
-
由于某种原因,先前的构建失败,并自动将我带到显示Jenkins愤怒的火脸的Jenkins日志页面:
For some reason the previous build failed and automatically took me to Jenkins logs page showing Jenkins angry fire face:
再次重新运行仅运行的Jenkinsfile管道(该管道并行运行多个项目中存在的单个Gradle任务(让我们说:rpm
任务)),并且成功运行!!;在成功和失败的运行之间传递了已检查的参数/值-它们是相似的.
Re-ran just one run of Jenkinsfile pipeline again (which runs a single Gradle task (lets say: rpm
task) present in multiple projects in parallel) and it worked successfully!!; checked parameters/values passed between successful and failed runs - they were similar.
示例Jenkinsfile 可在以下位置找到:,我在其中运行gradle任务(让通过创建动态阶段(这样我就不会在每个项目的Jenkinsfile中对它们进行硬编码)并行地(说gradle rpm
)(每个gradle rpm
任务在单独的stage step
中运行).
Example Jenkinsfile can be found here: Jenkinsfile Pipeline DSL: How to Show Multi-Columns in Jobs dashboard GUI - For all Dynamically created stages - When within PIPELINE section where I'm running a gradle task (lets say gradle rpm
) in parallel (each gradle rpm
task running in individual stage step
) by creating dynamic stages (so that I don't hard-code them in Jenkinsfile for each project).
注意:在Jenkinsfile中,即使gradle任务rpm
(我在单独的stage
(在stages
下)并行运行)具有定义的有效gradle任务,即rpm
,似乎在parallel
(Jenkinsfile中的部分)中的多个项目上运行的Gradle任务并非每次都能100%成功,因为至少我也看到了Gradle 4.3.1
错误:
NOTE: In Jenkinsfile, even though the gradle task rpm
(that I'm running in parallel in individual stage
(under stages
) section has a valid gradle task defined i.e. rpm
, it seems like Gradle task running on multiple projects in parallel
(section within Jenkinsfile) is not 100% successful everytime, with at least Gradle 4.3.1
as I'm also seeing this other error:
05:31:41 FAILURE: Build failed with an exception.
05:31:42
05:31:42 * What went wrong:
05:31:42 Task 'null' not found in root project 'T000123_ABCD_Project'.
05:31:42
此问题的发布者在此处表示类似:分发4.10.2后的分级问题
This issue poster said similar here: gradle issue after distribution 4.10.2
这是Jenkins堆栈跟踪中显示的完整错误日志:
Here is the Full error log in Jenkins stack trace is showing:
Oops!
A problem occurred while processing the request.
Please check our bug tracker to see if a similar problem has already been reported.
If it is already reported, please vote and put a comment on it to let us gauge the impact of the problem.
If you think this is a new issue, please file a new issue.
When you file an issue, make sure to add the entire stack trace, along with the version of Jenkins and relevant plugins.
The users list might be also useful in understanding what has happened.
Stack trace
java.lang.IllegalArgumentException: Last unit does not have enough valid bits
at java.util.Base64$Decoder.decode0(Base64.java:734)
at java.util.Base64$Decoder.decode(Base64.java:526)
at hudson.util.UnbufferedBase64InputStream.read(UnbufferedBase64InputStream.java:41)
at hudson.util.UnbufferedBase64InputStream.read(UnbufferedBase64InputStream.java:53)
at java.io.DataInputStream.readFully(DataInputStream.java:195)
at java.io.DataInputStream.readFully(DataInputStream.java:169)
at hudson.console.ConsoleNote.readFrom(ConsoleNote.java:258)
at hudson.console.ConsoleAnnotationOutputStream.eol(ConsoleAnnotationOutputStream.java:111)
at hudson.console.LineTransformationOutputStream.eol(LineTransformationOutputStream.java:60)
at hudson.console.LineTransformationOutputStream.write(LineTransformationOutputStream.java:56)
at java.io.FilterOutputStream.write(FilterOutputStream.java:77)
at org.jenkinsci.plugins.workflow.log.FileLogStorage$1$1.write(FileLogStorage.java:238)
at java.io.FilterOutputStream.write(FilterOutputStream.java:125)
at org.apache.commons.io.output.ProxyOutputStream.write(ProxyOutputStream.java:89)
at org.kohsuke.stapler.framework.io.LargeText$HeadMark.moveTo(LargeText.java:314)
at org.kohsuke.stapler.framework.io.LargeText.writeLogTo(LargeText.java:229)
at hudson.console.AnnotatedLargeText.writeRawLogTo(AnnotatedLargeText.java:168)
at org.jenkinsci.plugins.workflow.log.FileLogStorage$1.writeHtmlTo(FileLogStorage.java:203)
at hudson.console.AnnotatedLargeText.writeLogTo(AnnotatedLargeText.java:147)
at org.kohsuke.stapler.framework.io.LargeText.doProgressText(LargeText.java:264)
at hudson.console.AnnotatedLargeText.doProgressiveHtml(AnnotatedLargeText.java:95)
at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396)
at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408)
at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212)
at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145)
at org.kohsuke.stapler.MetaClass$11.doDispatch(MetaClass.java:535)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747)
Caused: javax.servlet.ServletException
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:797)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878)
at org.kohsuke.stapler.MetaClass$2.doDispatch(MetaClass.java:219)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878)
at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:456)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878)
at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:280)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878)
at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:280)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:676)
at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:873)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)
at com.cloudbees.jenkins.support.impl.cloudbees.UnrestrictedApiCallsMonitor$ApiMonitorFilter.doFilter(UnrestrictedApiCallsMonitor.java:120)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:243)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
at com.cloudbees.jenkins.support.slowrequest.SlowRequestFilter.doFilter(SlowRequestFilter.java:37)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:61)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:59)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:125)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:128)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:99)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)
at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1701)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1668)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:502)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
at java.lang.Thread.run(Thread.java:745)
怎么了我在Jenkins中收到此错误消息?
What's making me get this error message in Jenkins?
错误:: java.lang.IllegalArgumentException:最后一个单元的有效位不足
和
为什么我的管道间歇性地运行失败,并在 Gradle 中出现以下错误消息(当parallel
部分用于在其中运行某些内容(例如Gradle someTask
)时) Jenkinsfile
)?
Why my pipeline runs fail intermittently with the following error message in Gradle (when parallel
section is used to run something (i.e. a Gradle someTask
) within Jenkinsfile
)?
在根项目中找不到任务'null'
运行 许多 并发该管道(在parallel
中的许多项目上运行Gradle任务)时,我启动了4个管道运行,每个都在构建3-5项目的Gradle rpm
任务),那么我看到了以下与文件锁定有关的问题.
When running many concurrent runs of this pipeline (which runs a Gradle task on many projects in parallel
), let's say I launch 4 pipelines runs and each is building 3-5 project's Gradle rpm
task), then I saw the following issues related to FILE locking.
https://stackoverflow.com/a/59828842/1499296
即Gradle无法删除文件夹/文件(如下所示)
**Execution failed for task ':clean'.
> Unable to delete directory: /some/path/build/someFolder/aFolder_or_File **
或
由于超时等待锁定文件哈希缓存,未能捕获输出文件快照以完成任务
Failed to capture snapshot of output files for task ':rpm' property 'archivePath' during up-to-date check.
> Timeout waiting to lock file hash cache (/view/user123456_Team_Tools/vobs/space/test/folder1/Project1of5/.gradle/4.3.1/fileHashes). It is currently in use by another Gradle instance.
Owner PID: 29003
Our PID: 903
Owner Operation:
Our operation:
Lock file: /view/user123456_Team_Tools/vobs/space/test/folder1/Project1of5/.gradle/4.3.1/fileHashes/fileHashes.lock
或
获取:无法使用BuildScopeServices.createScriptPluginFactory()创建ScriptPluginFactory类型的服务
17:40:11 FAILURE: Build failed with an exception.
17:40:11
17:40:11 * What went wrong:
17:40:11 Could not create service of type ScriptPluginFactory using BuildScopeServices.createScriptPluginFactory().
17:40:11 > Could not create service of type FileHasher using BuildSessionScopeServices.createFileSnapshotter().
或
无法读取路径 '/some/jenkins/workspace/path/of/a/job/folder/sub-folder/file.class_or_any_extension'
或
java.io.FileNotFoundException ,即找不到文件(如果仅运行此管道的一次运行,则Gradle编译成功).
java.io.FileNotFoundException i.e. Not able to find a file (that Gradle is builds successfully if I run only one run of this pipeline).
17:38:28 * What went wrong:
17:38:28 Execution failed for task ':rpm'.
17:38:28 > java.io.FileNotFoundException: '/some/jenkins/workspace/path/of/a/job/folder/sub-folder/artifact-1.0.0.121.rpm'
推荐答案
在单个管道运行案例中,如果您有更多项目(比如说20多个项目)并且正在运行Gradle someTask (每个项目处于单个阶段还是单个阶段),则可以设置GRADLE_USER_HOME=$WORKSPACE/${whichProject}
文件夹(其中${whichProject}
是将可用的项目文件夹)在Jenkins WORKSPACE
中完成(在git clone
或类似结帐操作之后).这可能可以解决任何parallel
任务遇到的任何与锁定相关的问题,但以牺牲Gradle的性能为代价(即,在许多项目的并行任务运行中不使用Gradle CACHE的代价).
At a single pipeline run case, if you have even more projects (let's say 20+ projects) and you are running Gradle someTask in parallel (whether in a single stage or individual stages per project), then you could set GRADLE_USER_HOME=$WORKSPACE/${whichProject}
folder (where ${whichProject}
is a project folder which will be available to you in Jenkins WORKSPACE
(after git clone
or similar checkout operation)). This could possibly solve any parallel
task running into any locking related issues but at the cost of compromising Gradle's performance (i.e. for not using Gradle CACHE among many project's parallel task run).
在动态创建的唯一Jenkins工作空间(示例:/jenkins/workspaces/jobname/<buildnumber>/
,其中BUILD_NUMBER使Jenkins工作空间文件夹唯一)中,为每个项目设置唯一的 GRADLE_USER_HOME 值(每个项目)将解决任何问题锁定相关问题
Setting a unique GRADLE_USER_HOME value (per project) inside dynamically created unique Jenkins workspace (example: /jenkins/workspaces/jobname/<buildnumber>/
where BUILD_NUMBER makes the Jenkins workspace folder unique) will resolve any lock related issues
- 即这样做, Project1 将使用
GRADLE_USER_HOME=/jenkins/workspaces/jobname/<buildnumber>/Project1
(现在.gradle
和caches
文件夹将位于此文件夹下,并由Gradle使用,并且不会与其他文件夹冲突项目的Gradle CACHE文件夹:.gradle
和caches
,它们也同时运行).
- i.e. Doing this, Project1 will use
GRADLE_USER_HOME=/jenkins/workspaces/jobname/<buildnumber>/Project1
(and now.gradle
andcaches
folders will sit under this folder and used by Gradle and won't collide with other project's Gradle CACHE folder:.gradle
andcaches
which are also running in parallel).
在运行Gradle任务时,我注意到 CLI选项 --gradle-user-home
(也称为$ GRADLE_USER_HOME)仅设置为Jenkins的WORKSPACE 示例值,因此,所有3-5项目的Gradle任务(在我的情况下为rpm
任务)运行在parallel
中(使用相同的服务帐户的Gradle caches
文件夹),该文件夹通常位于GRADLE_USER_HOME位置(因此,在我的情况下,单个Gradle的caches
文件夹由这3-5个项目共享以并行运行).
I noticed CLI option --gradle-user-home
(aka $GRADLE_USER_HOME) while running Gradle task was getting set to just Jenkins's WORKSPACE example value only and thus, all 3-5 project's Gradle task (in my case rpm
task) runs were running in parallel
(using the same service account's Gradle caches
folder) which usually sits under GRADLE_USER_HOME location (so in my case single Gradle's caches
folder was getting shared by all those 3-5 projects for parallel task run).
我仍在寻找在运行并发管道运行时的解决方案(在单个管道运行中每个项目再次运行parallel
Gradle rpm
任务)每个他们自己的 不同 Jenkins WORKSPACE 文件夹,为什么我仍然遇到这些问题;如果找到解决方案,我会更新.
I'm still trying to find the solution for When running concurrent pipeline runs (which again runs parallel
Gradle rpm
task per project within a single pipeline run) each using their own different Jenkins WORKSPACE folders, why I'm still getting these issues; I'll update if I find a solution.
这篇关于Jenkins-java.lang.IllegalArgumentException:最后一个单元没有足够的有效位& Gradle错误:在根项目中找不到任务"null"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!