Assuming that each of your development teams works with a different module of your project, and "One change should only cause the pipeline of the team that made the changes," I would use Git Submodules :
Submodules allow you to store a Git repository as a subdirectory of another Git repository.
with one repo, which becomes a submodule of the main repo module for each team. This will be transparent to the teams, because they just work only with the specified repositories.
The core module is also an aggregator project for your module projects in terms of a build tool. So you have options:
- to create each repo / pipeline individually or
- to create an entire (main) project right away.
An assembly console that contains one or more assembly tasks is associated with each command / repo / module.
The main conveyor is just a collection of downstream jobs that are the starting points of the team / repo / module pipelines.
Assembly triggers can be any manually, synchronized, or with source changes.
A decision must also be made:
- regardless of whether you use your modules separately, so that other modules depend only on release versions.
- Advantage:
- Others rely on released, usually more stable versions.
- Modules can decide which version of the dependency they want to use.
- Disadvantages:
- Releases should be prepared for each module.
- This may take longer until the latest changes are available to other users.
- Modules must decide which version of the dependency they want to use. And they have to adapt it every time they need functionality added to a newer version.
or whether you use one version for the entire project (which is then inherited by the modules): ...-SNAPSHOT during the development cycle - release version when the project is released.
In this case, if there are modules that are necessary for others, for example. the main module, its successful assembly should also initiate the assembly of dependent modules, so that the incompatibility will be recognized as soon as possible.
- Benefits:
- Recent changes are immediately available to other users.
- The release is ready for the whole project only after its delivery.
- Disadvantages:
- Recent changes that may be available to other users may contain a not very stable (snapshot) code.
Re "How can I visualize a complete pipeline"
I do not know a single plugin that can do this with Workflows at the moment.
There Build Graph View Plugin , which was originally created for streaming streams, but it is more than two years old:
Downstream strings are identified using the DownStreamRunDeclarer extension point.
- The default is Jenkins dependencyGraph and UpstreamCause, and as such can detect a common assembly chain.
- the build-flow plugin helps to transform the flow in a graph
- some Jenkins plugins may later provide custom solutions.
(You know, "maybe" and "later" often will not and will never develop .;)
There is a Build Pipeline Plugin , but it also seems to be unsuitable for Workflows:
This plugin provides the Assembly Pipeline assembly for upstream and downstream connected jobs [...]
Re "way to pull the last successful artifacts"
Apparently this is not so smooth with Gradle :
By default, Gradle does not define any repositories.
I use Maven and there are local and remote repositories where the latter can also be:
[...] internal repositories installed on a file or an HTTP server inside your company, used to share private artifacts between development teams and releases.
Have you considered using a binary repository manager like Artifactory or Nexus ?