Coder Social home page Coder Social logo

jenkinsci / tikal-multijob-plugin Goto Github PK

View Code? Open in Web Editor NEW
74.0 116.0 135.0 789 KB

A new multijob plugin was created by Tikal ALM team. Using this job you can add full hierarchy of Jenkins jobs that will be executed in sequence or in parallel.

Home Page: https://plugins.jenkins.io/jenkins-multijob-plugin/

License: MIT License

Java 98.09% HTML 1.91%
deprecated

tikal-multijob-plugin's Introduction

Deprecation Note

This plugin was very popular for many years, but since most of Jenkins usage now is based on Jenkins Pipeline, and the 'parallel' step along with 'BlueOcean' can basically do whatever this plugin does, it is no longer in Tikal's radar. Also, we published the parallelPhase library class that can do in pipelines what the plugin does.

When to use MultiJob (tikal-multijob-plugin) plugin ?

  • If you'd like to stop the mess with downstream / upstream jobs chains definitions
  • When you want to add full hierarchy of Jenkins jobs that will be executed in sequence or in parallel
  • Add context to your buildflow implementing parameter inheritance from the MultiJob to all its Phases and Jobs, Phases are sequential whilst jobs inside each Phase are parallel

Found a bug ? require a new feature ?


========

tikal-multijob-plugin's People

Contributors

alex-dr avatar alex-n avatar andresoderlind avatar arpit-nagar avatar balakine avatar chenco166 avatar cjo9900 avatar cohencil avatar dcendents avatar dependabot[bot] avatar dkichler avatar hagzag avatar harcher81 avatar imakowski avatar itaior avatar jglick avatar joepweijers avatar kanfil avatar ndeloof avatar neonplayrobert avatar nmorey avatar notmyfault avatar oleg-nenashev avatar ptrsny avatar ronil avatar rrialq avatar shacharbz avatar sokar92 avatar sschuberth avatar yorammi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tikal-multijob-plugin's Issues

java.io.IOException: Failed to write url on api/xml?depth=1

API URL /job//api/xml?depth=1 causes exception. Note that 'depth=0' works fine.

java.io.IOException: Failed to write url
at org.kohsuke.stapler.export.Property.writeTo(Property.java:122)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:197)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:192)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:192)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:192)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:241)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:139)
at org.kohsuke.stapler.export.Property.writeTo(Property.java:116)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:197)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:241)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:187)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:139)
at org.kohsuke.stapler.export.Property.writeTo(Property.java:116)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:197)
at org.kohsuke.stapler.export.Model.writeTo(Model.java:164)
at org.kohsuke.stapler.ResponseImpl.serveExposedBean(ResponseImpl.java:267)
at hudson.model.Api.doXml(Api.java:100)
at sun.reflect.GeneratedMethodAccessor1170.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:619)
at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:298)
at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161)
at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)
at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:121)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:211)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
at org.kohsuke.stapler.MetaClass$13.dispatch(MetaClass.java:411)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
at com.smartcodeltd.jenkinsci.plugin.assetbundler.filters.LessCSS.doFilter(LessCSS.java:47)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:129)
at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:59)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:129)
at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:123)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:49)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
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:76)
at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:370)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1170)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:640)
at java.lang.Thread.run(Thread.java:853)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor1168.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:619)
at org.kohsuke.stapler.export.MethodProperty.getValue(MethodProperty.java:66)
at org.kohsuke.stapler.export.Property.writeTo(Property.java:116)
... 103 more
Caused by: java.lang.NullPointerException
at hudson.model.Run.getAbsoluteUrl(Run.java:983)
... 108 more

Show status of all sub jobs for a particular build

This is https://issues.jenkins-ci.org/browse/JENKINS-43127.

In its current version the MultiJob plugin shows a nice tree view of all downstream jobs on the job's main page. In case one or more phases are also MultiJobs, their downstream jobs are shown, too.

On the contrary, for a given build, the status page only shows the status of this build's directly triggered phase jobs, omitting the status of the phases downstream jobs.

Would be nice if the build's status page could also show the complete tree, like the job's status page does.

Resume Build functionality only available to admins

The "Resume Build" button is no longer available since this commit: 2424cec

I understand that this was a security fix, but would it be possible to put a proper permission in place? The job.build permission seems like a pretty sane user permission for this feature.

Job indirectly included multiple times in a multijob is sometimes only built once

Create the following multijob setup:

multijob_1
   phase 1 (parallel)
      multijob_2
         phase 1
            regular_job_1
      multijob_3
         phase 1
            regular_job_1

Build multijob_1.

Sometimes you will get two separate regular_job_1 builds (as expected), but sometimes you will only get a single regular_job_1 build, referenced from both the multijob_2 build and the multijob_3 build!

This does not seem to happen if the phase in multijob_1 is serial rather than parallel. It also does not seem to happen if regular_job_1 is included twice directly in multijob_1, ie without multijob_2/3 inbetween.

Missing parameters in MultiJob subbuilds

We sometimes don't see the parameters in some sub-builds which have been triggered via an upstream MultiJob-Build.

The job configs themselves haven't changed between the attached runs.

There are no stacktraces or other related errors/warnings in the jenkins.err.log, jenkins.out.log, jenkins.wrapper.log and no visible error messages/stacktraces in the Jenkins GUI.

Unfortunately for some jobs the parameter information is essential for us, to trigger rebuilds, so this is rather a critical than a cosmetic bug for us.

MultiJob got stuck eventhough all phase jobs are compelted

Hi
we are facing am issue with multi job project,
even though all phase builds are completed, mutijob is still running for a long time nearly more then 8Hrs.
so we had manually aborted the job.
can you please let me know is this a known problem and how to fix it?
currently we are using Jenkins ver: 1.646 and multi job version :1.29

The MultiJob shouldn't consume an executor

A deadlock can be encountered if there aren't enough executors, because the MultiJob is taking one up. For example, a Jenkins master with only one executor and no slaves can never use the MultiJob without deadlocking.
I marked this a bug, because this is exactly the same issue that came up with Matrix jobs, and that was considered a bug. See: JENKINS-936 [https://issues.jenkins-ci.org/browse/JENKINS-936]

Also monitored @: https://issues.jenkins-ci.org/browse/JENKINS-14204

Creating a multijob plugin to as a template cause error

If I create a multijob and then try to use it as a template I get the following error:
FATAL: hudson.model.FreeStyleBuild cannot be cast to com.tikal.jenkins.plugins.multijob.MultiJobBuild
java.lang.ClassCastException: hudson.model.FreeStyleBuild cannot be cast to com.tikal.jenkins.plugins.multijob.MultiJobBuild
at com.tikal.jenkins.plugins.multijob.MultiJobBuilder.perform(MultiJobBuilder.java:64)
at hudson.plugins.templateproject.ProxyBuilder.perform(ProxyBuilder.java:83)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:717)
at hudson.model.Build$BuildExecution.build(Build.java:199)
at hudson.model.Build$BuildExecution.doRun(Build.java:160)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499)
at hudson.model.Run.execute(Run.java:1502)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:236)
BTW this a great plugin. It has greatly reduced the effort around our use of Jenkins. Thank you!

Disable/enable job or phase without disabling the "regular" job itself

Whilst working with Build Phases conducted of regular jobs, we need the ability to disable a certain Job within the Phase or the Flow of the build. Although as of today disabling a certain Job will also disable it in a "CI scope" or its standalone state [out of the MultiJob scope].
so we need to add a check box at each phase level which will disable that certain job or Phase all together, what would be nice is to configure it once and it will be back to normal the next time you execute the MultiJob or permanent.
This Feature request is also available @: https://issues.jenkins-ci.org/browse/JENKINS-14600
Inspired by: https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin?focusedCommentId=62620522#comment-62620522

Mult-Job With Same Job

When running a multi-job using the same sub job with different parameters the visualization show all jobs running at the same time. Also if you run the same job in parallel and click on a flashing job it takes you to the wrong job (same job different parameters).

Multijob occupies executer, even when it is only waiting for a child job to complete

This causes causes an unpleasant behaviour if I don't have many executors.

Let's say I have jobs like:

Collate data [target data is a parameter]
Build analysis tool
Run analysis.

I use a multijob to tie these together.

PROCESS DATA MULTIJOB [target data is a parameter]

  • Collate
  • Build
  • Analyse

And now I want to target several data sources, so I use a multijob for these too:

PROCESS ALL DATA

  • PROCESS DATA MULTIJOB [data source A]
  • PROCESS DATA MULTIJOB [data source B]

But I have only two executors.

PROCESS ALL DATA starts on executor 1, and kicks off PROCESS DATA MULTIJOB [data source A] on executor 2.

This kicks off Collate [data source A], but there are no free executors, so it gets queued until an executor is free. But both executors are waiting for Collate [data source A] to finish, so there's a deadlock.

Is it possible for a job that's waiting for another job to finish to yield the executor?

MultiJob does not build Pipeline jobs

Hello,

Need your help here guys. I've diferrent Pipeline Jobs and I need to configure them using the Multijob Plugin Job as Upstream and downstream jobs. I'm unable to view or execute these upstream and downstream jobs which are created using Pipelines via Multijob Plugin Master Job. How do I fix this issue?

I'm using latest Multijob Plugin v1.30

job-name field should support Variable names

Generic build could be used by multiple groups , and the only difference between them is one phase. This phase should be passed as a parameter.

Example:
I've got a string parameter which is the JobName, and I would like to write in the MultiJob phase job-name field something like: $JobName

The JobName could be basic job or a MultiJob.

This is a recreation of a ticket in the previous project (https://issues.jenkins-ci.org/browse/JENKINS-30627)

Injecting parameters for downstream Jobs 1.22+

We have an in-house plugin based on lockable resources using which we inject parameters to Parameterized Projects that are based on the external dynamic factors.

The plug-in works fine on a standalone freestyle project and multijob project. However, while trying to inject the parameters into downstream jobs of a multijob project, although we were able to inject the parameters. The downstream jobs consume the variables from MultiJobParametersAction(variables passed down from upstream project) rather than ParametersAction(where the variables are injected). This was not an issue while using jenkins-multijob-plugin:1.21, where MultiJobParametersAction did not exist.

Please let me know if there is a way to inject parameters and have the downstream job consume it. Apologies if this is not the right forum to ask.

Job and Console column links broken on different port

When running Jenkins on a different port the links in the Job and Console column are broken as the links refer to port 8080 instead of the port Jenkins operates on.

I suspect the usage of job.absoluteUrl in JobColumn/column.jelly and ConsoleColumn/column.jelly may cause this issue.

a multijob, launching the same job in different phases with different parameters, shows on a view they run both

actually, I am observing the following picture: if I have a multijob with the same sub-job being run in different phases one-by-one, not concurrently, upon starting up the multijob I see the appearance as though the phases had started simultaneously, along with the jobs showing they are working in parallel, but they are not, and shall not. Essentially and actually, only one instance of the job has started and been running.
What I expect to see for the phases and the same jobs in different phases in the view not to look like they are running at the same time but at a time

Below here the picture comes. What could it be?
screenshot from 2017-04-09 15-21-48

Unstable phase job does not set multijob as unstable.

Been running into this for a few weeks now and thought I'd post. At first I thought I had not configured things correctly, but after further inspection it doesn't seem to be the case. I noticed that a phase that contains more than one job, if any of those jobs are marked unstable the multijob is marked as a failure. If a phase only contains one job and it marked unstable the multijob will also be marked unstable.

Availability of "Use custom workspace" option for all job types (at same location in job-configuration)

The option "Use custom workspace" is very useful (especially if several projects need to access the same compiled code etc.).
However, it is not available in all job types.
I propose to make this a default-option for all job types available.
Some solutions for similar issues addressing individual job types (e.g. Ivy, Ivy/Maven, Matrix) already exist, however for other job types they do not. And the location of this option on the job-configuration page is different.
I tested the availability of the "Use custom workspace" option for the following job types:

  • Freestyl: Available at: "Advanced Project Options"-->"Advanced"
  • MultiJob: NOT available!
  • Maven2/3: Available at: "Build"-->"Advanced"
  • Ivy: Available at: "Ivy Module Configuration"-->"Advanced"
  • Matrix: Available at: "Advanced Project Options"-->"Advanced"
  • Montor External: NOT available! (But maybe this makes sense!?)

Also monitored @: https://issues.jenkins-ci.org/browse/JENKINS-13576

[Question] Continuing execution on failure

I'm running a job which uses the multijob plugin. There are multiple jobs in a single phase and there are multiple phases. The issue happens when one job in a phase fails, It should ideally stop execution and shouldn't execute the following phases, but it keeps on executing the job and after executing all the jobs it returns final status as FAILURE.

I've marked the following setting Continuation condition to next phase as Completed. And the jobs are run sequentially. Am I doing something wrong?

I'm running multijob-plugin version 1.29

java.lang.NullPointerException at com.tikal.jenkins.plugins.multijob.views.PhaseWrapper.getIconColor(PhaseWrapper.java:71)

I am getting this error on a few multi-jobs. It looks like it was introduced in this commit when the getIconColor method was rewritten.

I believe it happens whenever a phase fails.

I have run phases sequentially on, also the continue condition is set to always. I am going to attempt to downgrade to the version before and see if it helps. Right now the multijob stops if any of the phases fail. I will post back with my findings.

Caught exception evaluating: job.iconColor.iconName in /view/<my view>/job/<my job name>/. Reason: java.lang.reflect.InvocationTargetException java.lang.NullPointerException at com.tikal.jenkins.plugins.multijob.views.PhaseWrapper.getIconColor(PhaseWrapper.java:71) Caused: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor1019.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.commons.jexl.util.PropertyExecutor.execute(PropertyExecutor.java:125) at org.apache.commons.jexl.util.introspection.UberspectImpl$VelGetterImpl.invoke(UberspectImpl.java:314) at org.apache.commons.jexl.parser.ASTArrayAccess.evaluateExpr(ASTArrayAccess.java:185) at org.apache.commons.jexl.parser.ASTIdentifier.execute(ASTIdentifier.java:75) at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83) at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57) at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51) at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80) at hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:74) at org.apache.commons.jelly.expression.ExpressionSupport.evaluateRecurse(ExpressionSupport.java:61) at org.apache.commons.jelly.expression.ExpressionSupport.evaluateAsString(ExpressionSupport.java:46) at org.apache.commons.jelly.expression.CompositeExpression.evaluateAsString(CompositeExpression.java:256) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.buildAttributes(ReallyStaticTagLibrary.java:111) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:150) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95) at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:147) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99) at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99) at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95) at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63) at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53) at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:112) at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:140) at org.kohsuke.stapler.IndexViewDispatcher.dispatch(IndexViewDispatcher.java:30) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:734) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:864) at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:248) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:734) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:864) at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:248) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:734) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:864) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:668) 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:860) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154) at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:225) 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:1637) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:105) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) 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:1637) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 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:190) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) at org.eclipse.jetty.server.Server.handle(Server.java:530) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:347) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:256) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102) at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:382) at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

Build only if SCM changes with parameters failed

Checking SCM changes does not use the variables from the parent in the subjob. This is also assuming that there are changes and compiles the subjob again.

I believe that the way this works is that it execute the SCM poll on the subjob level and it does not have the parameters. If it's not possible to send parameters while doing the poll, could multijob do the SCM poll inside the subjob definition, where the variables are accessible.

"[?]" before phase name?

Apologies if this is a FAQ... We just did a bulk rename of Jenkins projects, and after doing so we've noticed that some of the phase names in our multijob projects are now displayed with [?] in front of them. I haven't yet found any documentation that explains what this mark is trying to tell me.

(It's possible that these were present earlier and I just didn't notice them...)

Help?

Old/Unreadable Data with Jenkins 2.60.1 and plugin > 1.25

Hi,

since the last plugin upgrade to 1.25 we get some old/unreadable data for every job we run.
Data looks like this:

ConversionException: Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null ---- Debugging information ---- message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException cause-message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null class : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction required-type : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction converter-type : hudson.util.RobustReflectionConverter path : /build/actions/com.tikal.jenkins.plugins.multijob.MultiJobParametersAction line number : 23 -------------------------------


ConversionException: Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null ---- Debugging information ---- message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException cause-message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null class : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction required-type : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction converter-type : hudson.util.RobustReflectionConverter path : /com.tikal.jenkins.plugins.multijob.MultiJobBuild/subBuilds/com.tikal.jenkins.plugins.multijob.MultiJobBuild$SubBuild/build/actions/com.tikal.jenkins.plugins.multijob.MultiJobParametersAction line number : 662 -------------------------------, ConversionException: Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null ---- Debugging information ---- message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException cause-message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null class : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction required-type : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction converter-type : hudson.util.RobustReflectionConverter path : /com.tikal.jenkins.plugins.multijob.MultiJobBuild/subBuilds/com.tikal.jenkins.plugins.multijob.MultiJobBuild$SubBuild[2]/build/actions/com.tikal.jenkins.plugins.multijob.MultiJobParametersAction line number : 1622 -------------------------------, ConversionException: Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null ---- Debugging information ---- message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException cause-message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null class : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction required-type : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction converter-type : hudson.util.RobustReflectionConverter path : /com.tikal.jenkins.plugins.multijob.MultiJobBuild/subBuilds/com.tikal.jenkins.plugins.multijob.MultiJobBuild$SubBuild[3]/build/actions/com.tikal.jenkins.plugins.multijob.MultiJobParametersAction line number : 1723 -------------------------------, ConversionException: Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null ---- Debugging information ---- message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException cause-message : Could not call com.tikal.jenkins.plugins.multijob.MultiJobParametersAction.readResolve() : null class : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction required-type : com.tikal.jenkins.plugins.multijob.MultiJobParametersAction converter-type : hudson.util.RobustReflectionConverter path : /com.tikal.jenkins.plugins.multijob.MultiJobBuild/subBuilds/com.tikal.jenkins.plugins.multijob.MultiJobBuild$SubBuild[4]/build/actions/com.tikal.jenkins.plugins.multijob.MultiJobParametersAction line number : 1786 -------------------------------

1.26 didnt solve this problem, but it doesnt impact the jobs so far. Plugin still works and does its job.
But its a bit annoying.

Any ideas how to fix this?

greetings

Christian

Exclude result of one job from Multijob result

Is it posible to exclude result of one god from final result?
Example:
Master MultiJob Project (Job)
|----- Phase 1
|------> JOB A
|------> JOB D
|----- Phase 2
|------> JOB B
|------> JOB D
|----- Phase 2
|------> JOB C
I wont to exclude result of JOB D (it's technical job, and not interested for menedgers)

No API inspection of a multijob

Hey,

I was switching to this plugin to get a clear view and a better stack rather than using downstream + join plugin + build pipelines. Thanks for your awesome work!

However, I'm trying to get from the api some test result to publish in an external dashboard and I need to publish the downstream (subtasks) seperately. One solution is to use some fingerprints, but I think multijob can provide a better way.

I can't directly use the downstream task some are shared between multiple multijob jobs, so I need to get the build revision explicitely.

Also, a way to retrieve which downstream job is part of which phase and how phases are chaining through the API would be awesome!

Feature Request to specify a delay before starting jobs in parallel

I have a multi-job with 29 jobs in one phase but I don't want all of them to start at once. I'd like a delay of a few seconds before starting a job. It could be global, e.g. wait three seconds before starting the next job, or per job, e,g. wait five seconds before starting this job.

Thanks for considering this.

Cheers,
Cheryl

Jobs status is greyed out even if build is running

Sub jobs does not display the status even if they are running. With the jenkins update to the version 2.107.2, status of sub jobs are greyed out and gives hard time to figure out the current phase of job while running.

MultiJob plugin should differ when the same job is used multiple times

We use MultiJob a lot for managing certain automated infrastructure builds (executing ansible). In a number of our phases we call the same Jenkins Job multiple times with different parameters.
For example:
image

These phase items, running in parallel and using the same job, all report the same status (I assume it is taking the 'result' from lastbuild?). This means that when 3 jobs execute, if one goes green, they all report green, if one goes red, they all report red.

Restrict top-level multi-job projects in MultiJob view

I have many multi-job projects list QA, Staging, Release etc.
I want to create a multi-job view for each of these projects.

Right now, a multi-job view shows all existing multi-job projects.
I would like to select which multi-job projects appear in certain views.

It would be great if we can use the View Job Filters plugin to do this.

Regards,
Deepak

Need to filter jobs in Multijob view

Currently, a multijob view shows all the multijob projects. This view can get cluttered. A nice thing to have would be to choose which multijob project to show in a view. To give an example, we used the multijob plugin to good effect for having parallel tasks in our deployment for various environments. With a custom multijob view, I can have a tab for each environment with one multijob project in it. It gives a neater dashboard.

[Feature Request] Ability to specify jobs by regex (run serially or parallel)

Someone had noted this in 2015 in the comments section of the Jenkins Wiki page, but I didn't see an issue for it.

My use case is such that I'd like to run jobs by a regex serially, and I would like to be able to add a new job matched by that regex and have it automatically added to the list of jobs to be run (on the next iteration).

Parmeterize node(s) in build Phases & Jobs

Whilst triggering a MultiJob, one wishes to determine on what node the Job will actually run on, and this may be quite complex when you have 3 pahses with 2 jobs in them and you want to control what will run where.

You could use the "Tie this job to node" which comes in Jeknins out of the box, but then you loose the flexibility of Multi Job which basically can take you from Dev => QA => PROD where all that changes is the nodes which your process is running on.

This case is also monitored @: https://issues.jenkins-ci.org/browse/JENKINS-14599

Add ability to expand/collapse a multijob view at the phase and name levels

As a user I would like the ability to be able to expand and collapse the multijob phases, as well as the multijob itself (for nested multijobs).

For example, if I have the 'leaf level' multijob to work on the foobar project it might have the following display output.

  • Foobar Master Trigger (multijob name)
    • Build (phase name)
      • Build foobar on linux
      • Build foobar on mac
      • Build foobar on windows
    • Test (phase name)
      • Test foobar on linux
      • Test foobar on mac
      • Test foobar on windows
    • Distribute (phase name)
      • Create linux installer
      • Create mac installer
      • Create windows installer

I would like to have a toggle or button or ability to collapse this so that it would only show multijob name and it's phases. For example:

  • Foobar Master Trigger (multijob name)
    • Build (phase name)
    • Test (phase name)
    • Distribute (phase name)

And the ability to again, collapse this to see just the multi-job name

  • Foobar Master Trigger (multijob name)

This would be beneficial to me because we have nested multijobs for our different products. Some times I want to see the details, sometimes I want to see the summary (well, the managers want to see the summary.....)

For example, if we have just three projects where we build a common library and then two products that use the common library, it could look something like the following in detailed view:

  • Master Build Trigger (multijob name - level 1)
    • Common Library Master Trigger (multijob name - level 2)
      • Build (phase name)
        • Build common library on linux
        • Build common library on mac
        • Build common library on windows
      • Test (phase name)
        • Test common library on linux
        • Test common library on mac
        • Test common library on windows
      • Distribute (phase name)
        • Create linux installer
        • Create mac installer
        • Create windows installer
    • Foobar Master Trigger (multijob name - level 2)
      • Build (phase name)
        • Build foobar on linux
        • Build foobar on mac
        • Build foobar on windows
      • Test (phase name)
        • Test foobar on linux
        • Test foobar on mac
        • Test foobar on windows
      • Distribute (phase name)
        • Create linux installer
        • Create mac installer
        • Create windows installer
    • Blarg Master Trigger (multijob name - level 2)
      • Build (phase name)
        • Build blarg on linux
        • Build blarg on mac
        • Build blarg on windows
      • Test (phase name)
        • Test blarg on linux
        • Test blarg on mac
        • Test blarg on windows
      • Distribute (phase name)
        • Create linux installer
        • Create mac installer
        • Create windows installer

If I could collapse the multijobs at the multijob name level as well as at the phase level then I can see the hierarchical display without being overwhelmed with the details. I can drill down into the details as desired.

For example, if collapse at the names, the above could be summarized as:

  • Master Build Trigger (multijob name - level 1)
    • Common Library Master Trigger (multijob name - level 2)
    • Foobar Master Trigger (multijob name - level 2)
    • Blarg Master Trigger (multijob name - level 2)

It would also be nice if there were options such as

  1. collapse/expand all
  2. collapse/expand all below this point

To make managing the viewing of nested multijobs easier.

Collect Changes

Hi!

I got a multijob project in my Jenkins that triggers my pipeline to build, deploy, test and publish my application.
I'm using TFS version control and the changes are collected in the build job.
Is there a way to get these changes and send an email in the multijob project to the developers that made changes in the SCM?

Thanks a lot in advance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.