Wrong output on .../job/*/maven

36 views
Skip to first unread message

Aaron Digulla

unread,
Mar 18, 2019, 11:15:26 AM3/18/19
to Jenkins Users
I have three projects in my example, A, B and C.

A is built on another Jenkins PROD. It's deployed to Nexus.

B depends on A. It's built on Jenkins TEST.

C depends on B. It's also built on Jenkins TEST.

All three projects have a SNAPSHOT version.

The web page .../job/*/maven of B shows me:

- All artifacts of B twice (*.jar, *.jar, *-sources.jar, *-sources.jar, *-test-sources.jar, *-test-sources.jar, *.pom, *.pom, *-tests.jar, *-tests.jar)
- No "Upstream Builds"
- No "Downstream Jobs"
- A is listed as dependency

I'd expect each artifact of B once and C as downstream job. Not sure about dependencies but seeing A here would be nice even though it's built on another Jenkins.

The web page .../job/*/maven of C shows me:

- Just some duplicate artifacts. This is a multi-module build. I'm seeing the root POM twice, everything else just once.
- No "Upstream Builds"
- No "Downstream Jobs"
- A and B are listed as dependencies.

As far as I can tell, the two jobs use the same Jenkins Pipeline. They are both of type "Multibranch Pipeline".

B gets deployed to Nexus when I build the "master" and release branches but not for feature branches. C only gets deployed to Nexus when it's a release branch.

I'm admin on Jenkins TEST, so I'm pretty sure it's not a ITEM.Read permission issue.

There is no config option "Build whenever a SNAPSHOT dependency is built" for the jobs B or C. I can see the option when I click "View Configuration" in .../job/*/master/configure

Questions:

- Why do I sometimes get duplicate artifacts? They are not duplicated on disk. In the console log, I just see a single invocation of artifactsPublisher but sometimes, it reports the same artifact several times.
- Why isn't C listed as "Downstream Job" of B?
- How can I collect more information to debug this?

Regards,

--
Aaron Digulla

Cyrille Le Clerc

unread,
Mar 18, 2019, 7:15:15 PM3/18/19
to Jenkins Users
Hi Aaron,

- Why do I sometimes get duplicate artifacts? They are not duplicated on disk. In the console log, I just see a single invocation of artifactsPublisher but sometimes, it reports the same artifact several times.

Can you share the Jenkinsfile and the logs of your build? Usually artifact are displayed several time because "mvn package" or more than "package" ("install" or "deploy")  is called several times in the build (e.g. invoking "mvn test" then "mvn deploy")
 
- Why isn't C listed as "Downstream Job" of B?

Can you please share screenshots of the "/maven" tab of both job "B" and "C"?
By default, downstream pipeline triggers only work when a pipeline is"success" or "unstable" and when the "mvn" goal is "deploy". This means that by default, "mvn package" or "mvn install" would not trigger a downstram pipeline.
 
- How can I collect more information to debug this?

Aaron Digulla

unread,
Mar 19, 2019, 11:04:50 AM3/19/19
to Jenkins Users
Hi Cyrille,

Thanks for the quick answer. My first reply somehow got swallowed.

Hi Aaron,

- Why do I sometimes get duplicate artifacts? They are not duplicated on disk. In the console log, I just see a single invocation of artifactsPublisher but sometimes, it reports the same artifact several times.

Can you share the Jenkinsfile and the logs of your build? Usually artifact are displayed several time because "mvn package" or more than "package" ("install" or "deploy")  is called several times in the build (e.g. invoking "mvn test" then "mvn deploy")

I checked the console log. In both builds, I see Maven started twice with these options:

1.
mvn --batch-mode --show-version -U clean install sonar:sonar -P coverage -Dmaven.repo.local=...
2.
mvn --batch-mode --show-version -U license:add-third-party license:third-party-report site -Dmaven.repo.local=...

The
artifactsPublisher is invoked for #1, in #2, I'm disabling all publishers with "publisherStrategy: EXPLICIT". In the log, artifactsPublisher appears in the "build" step (#1) and not in the "license check" step (#2).

I really can't see why it gets additional artifacts in build of project A but not B. Jenkinsfile and Pipeline library are the same for both projects, so I'd expect the same output. The good news is that it's stable. It always archived twice in A and never in B.
 
 
- Why isn't C listed as "Downstream Job" of B?

Can you please share screenshots of the "/maven" tab of both job "B" and "C"?

C looks like this:

-------------------------------------------------
[...]
Artifacts generated by this build. Hyperlink added when the artifact has been deployed to a Maven repository.
Upstream Builds
Builds that generate artifacts that are dependencies of this build.
This list is filtered by permissions, you must have the ITEM.Read permission on the job to see it.
Note that these builds have not necessarily triggered this job: a trigger "Build whenever a SNAPSHOT dependency is built" must be configured on this job.
Downstream Jobs
Jobs that have dependencies on artifacts generated by this build.
This list is filtered by permissions, you must have the ITEM.Read permission on the job to see it.
Note that these jobs will not necessarily be triggered by this job: a trigger "Build whenever a SNAPSHOT dependency is built" must be configured on the downstream job.
Dependencies
Dependencies recorded according to the settings of the "Pipeline Graph Publisher"
By default, only "snapshot" dependencies are recorded and "release" dependencies are ignored to optimize the size on disk of the database of the "Pipeline Maven Plugin".
-------------------------------------------------

B looks the same, only that it lists "C" under "Dependencies" but not in "Upstream Builds".

By default, downstream pipeline triggers only work when a pipeline is"success" or "unstable" and when the "mvn" goal is "deploy". This means that by default, "mvn package" or "mvn install" would not trigger a downstram pipeline.

That would be it. I avoid to publish to Nexus (see my post "Chained builds" for the reasons). Is there a way to activate this for "mvn install"?
Can you please add a link to https://wiki.jenkins.io/display/JENKINS/Logging to the FAQ item?

And I really don't understand the last point in the list.

> Look at the pipeline build logs, troubleshooting details are added

This sounds as if there is already a log file for pipeline builds. Do you refer to the console log? Would enabling the two loggers add more output to the console log? Or is that written elsewhere? What is the file name? Which folder?

Is looking really enough? Don't you have to start the build before that?

And "are added" is confusing. Did you mean "will be added there"?

Aaron Digulla

unread,
Mar 19, 2019, 11:20:06 AM3/19/19
to Jenkins Users
Hi Cyrille,

I could fix one of my problems in the mean time: To get the downstream build working, I had to do the following:

In "Manage Jenkins" / "Global Tool Configuration", I had to add a "Pipeline Graph Publisher" with the dropdown "Add Publisher Options". In there, I could switch the option "Maven lifecycle phase threshold" from "deploy" to "install".

That triggers the downstream builds of feature branches. Now, I have to figure out how to share the artifacts. See my post "Chained builds" for my thoughts on that.

That leaves the weird behavior of the artifactsPublisher and my comments about the new FAQ item.

Thanks a lot,

Aaron Digulla

Cyrille Le Clerc

unread,
Mar 21, 2019, 11:20:54 AM3/21/19
to Jenkins Users
I have improved the FAQ entry based on your feedback, can you please have a look?

>  I had to add a "Pipeline Graph Publisher" with the dropdown "Add Publisher Options". In there, I could switch the option "Maven lifecycle phase threshold" from "deploy" to "install".

Good that you figured this out. The User Experience is not great but I didn't find better so far.

> That leaves the weird behavior of the artifactsPublisher and my comments about the new FAQ item.

There is a non intuitive UX on the Pipeline Maven Plugin here: the artifactPublisher is just about "fingerprinting" and "archiving" the generated artifacts, it is NOT about updating the dependency graph that tracks (in a database) the produced and consumed artifacts. The "pipelineGraphPublisher" was introduced way after the "artifactsPublisher" (~6/12 months after).
I suspect that the "pipelineGraphPublisher" is invoked twice in your pipeline.

> That triggers the downstream builds of feature branches. Now, I have to figure out how to share the artifacts. See my post "Chained builds" for my thoughts on that.

I'll have a look, it is a difficult problem to solve. I didn't yet deep dive in https://maven.apache.org/maven-ci-friendly.html that seem to be related to the problem you want to solve.

Aaron Digulla

unread,
Mar 22, 2019, 5:01:47 AM3/22/19
to Jenkins Users


On Thursday, March 21, 2019 at 4:20:54 PM UTC+1, Cyrille Le Clerc wrote:

>> Please see new FAQ entry https://wiki.jenkins.io/display/JENKINS/Pipeline+Maven+Plugin#PipelineMavenPlugin-HowcanItroubleshootproblemsoftriggerofdownstreampipelines

I have improved the FAQ entry based on your feedback, can you please have a look?

Much better. Only the last sentence looks cut off: "Troubleshooting details are added".

Did you mean "You will find details to troubleshoot the issue below that line"?
 

>  I had to add a "Pipeline Graph Publisher" with the dropdown "Add Publisher Options". In there, I could switch the option "Maven lifecycle phase threshold" from "deploy" to "install".

Good that you figured this out. The User Experience is not great but I didn't find better so far.

How about printing "downstream not triggered because project used "mvn install" and the lower limit for triggering is "mvn deploy" + link to config where you can change that or a help page?
 

> That leaves the weird behavior of the artifactsPublisher and my comments about the new FAQ item.

There is a non intuitive UX on the Pipeline Maven Plugin here: the artifactPublisher is just about "fingerprinting" and "archiving" the generated artifacts, it is NOT about updating the dependency graph that tracks (in a database) the produced and consumed artifacts. The "pipelineGraphPublisher" was introduced way after the "artifactsPublisher" (~6/12 months after).
I suspect that the "pipelineGraphPublisher" is invoked twice in your pipeline.

I searched for "pipelineGraphPublisher" which got me no hits. Then "graph" which produces exactly one hit:

[withMaven] Publishers: Pipeline Graph Publisher: 12 ms, Generated Artifacts Publisher: 31 ms, Junit Publisher: 52 ms, Dependencies Fingerprint Publisher: 4 ms, Jacoco Publisher: 12 ms, Open Task Scanner Publisher: 14 ms
 
Seems like that plugin is a quiet one :-) Any hints?

> That triggers the downstream builds of feature branches. Now, I have to figure out how to share the artifacts. See my post "Chained builds" for my thoughts on that.

I'll have a look, it is a difficult problem to solve. I didn't yet deep dive in https://maven.apache.org/maven-ci-friendly.html that seem to be related to the problem you want to solve.

I read through the document and it seems an attempt to solve something but after reading it, I'm unsure what exactly.

Maybe what they try is to give the build result of each branch a unique version? So you could deploy all of them to Nexus and the next build would pick the right one to use.

The use of the Flatten Maven Plugin worries me a bit but I think this is necessary because Maven doesn't support variables in the project.version property (for good reason). But some things like removing dependencyManagement elements seems completely wrong to me.

Still, the idea to solve the "Maven doesn't support branches" by using one version per branch sounds promising. Does Jenkins take the version into account when building downstream projects i.e. if the downstream project has a dependency on 2.x-SNAPSHOT, it will not get triggered when I build 2.x-FOO-SNAPSHOT?

Regards,

--
Aaron Digulla

Cyrille Le Clerc

unread,
Apr 17, 2019, 5:19:44 AM4/17/19
to Jenkins Users
Adding a comment to not forget that this thread is not done
Reply all
Reply to author
Forward
0 new messages