mirror of https://github.com/jenkins-infra/iep
Add an IEP describing the new incrementals Maven repository
This commit is contained in:
parent
9cac39e7db
commit
1b06734132
|
@ -0,0 +1,148 @@
|
|||
ifdef::env-github[]
|
||||
:tip-caption: :bulb:
|
||||
:note-caption: :information_source:
|
||||
:important-caption: :heavy_exclamation_mark:
|
||||
:caution-caption: :fire:
|
||||
:warning-caption: :warning:
|
||||
endif::[]
|
||||
|
||||
= IEP-9: Incremental builds Maven repository
|
||||
|
||||
:toc:
|
||||
|
||||
.Metadata
|
||||
[cols="2"]
|
||||
|===
|
||||
| IEP
|
||||
| 9
|
||||
|
||||
| Title
|
||||
| Incremental builds Maven repository
|
||||
|
||||
| Author
|
||||
| link:https://github.com/rtyler[R Tyler Croy]
|
||||
|
||||
| Status
|
||||
| :speech_balloon: In-process
|
||||
|
||||
| Type
|
||||
| Architecture
|
||||
|
||||
| Created
|
||||
| 2018-03-19
|
||||
|
||||
| Discussions-To
|
||||
| link:http://lists.jenkins-ci.org/pipermail/jenkins-infra/2018-March/001417.html[infra@lists.jenkins-ci.org]
|
||||
|
||||
|===
|
||||
|
||||
|
||||
== Abstract
|
||||
|
||||
In order to support more rapid continuous delivery models, such as that
|
||||
described by
|
||||
link:https://github.com/jenkinsci/jep/tree/master/jep/300[Jenkins Essentials],
|
||||
Jenkins core and plugin builds must be deployed into a Maven repository much
|
||||
more incrementally rather than waiting for a developer to manually deploy a
|
||||
release to the existing `releases` footnote:[https://repo.jenkins-ci.org/releases/]
|
||||
repository.
|
||||
|
||||
|
||||
== Specification
|
||||
|
||||
For a more incremental developer workflow, rather than attempting to make sense
|
||||
of potentially thousands of `SNAPSHOT` versions of artifacts in a repository.
|
||||
this document proposes a specific and tightly controlled Maven repository for
|
||||
such builds.
|
||||
|
||||
This would mean Artifactory would have an `incrementals` repository *just* for
|
||||
these kinds of pre-release builds. For example, rather than
|
||||
`git-client-2.4.0-SNAPSHOT.jar` the repository would contain
|
||||
`git-client-2.4.0-a3dbf.jar`, assuming `a3dbf` is the Git short-commit for the
|
||||
build.
|
||||
|
||||
=== Garbage Collection
|
||||
|
||||
Artifacts in the `incrementals` repository must be garbage collected to the
|
||||
most recent 5 artifacts **or** the most recent 30 days of artifacts. For
|
||||
example, if a plugin (`io.jenkins.plugins.retrocean`) has no new commits in a
|
||||
30 day period, the `io/jenkins/plugins/retrocean/` directory should have no
|
||||
more than the five most recent artifacts stored. More active plugins should
|
||||
have no more than 30 days worth of artifacts stored.
|
||||
|
||||
|
||||
[NOTE]
|
||||
====
|
||||
Plugin and core tooling should use a consistent format for defining incremental
|
||||
built versions, such as: `<artifactId>-<major>.<minor>.<patch>-<sha1>.jar`. The
|
||||
specific format is not required for this document.
|
||||
====
|
||||
|
||||
|
||||
== Motivation
|
||||
|
||||
By adding this new, somewhat ephemeral, Maven repository, we can support newer
|
||||
development workflows in the Jenkins project without adversely affecting the
|
||||
existing "mainstream" development workflow of Jenkins plugins.
|
||||
|
||||
As mentioned briefly in <<costs>>, overhead is sufficiently low to adding that
|
||||
adding a new Maven repository, even if it's experimental and eventually
|
||||
abandoned, is worth the exploration.
|
||||
|
||||
== Rationale
|
||||
|
||||
A Maven repository hosted in Artifactory, alongside the `releases` and a number
|
||||
of other repositories, results in the simplest to deploy, and simplest to
|
||||
consume "bucket of artifacts" we currently have at our disposal.
|
||||
|
||||
In order to avoid over-reliance on these "incremental builds", the artifacts
|
||||
themselves should be expected to be deleted after the specified "garbage
|
||||
collection" period.
|
||||
|
||||
|
||||
=== Alternate Approaches
|
||||
|
||||
==== Azure Storage Container
|
||||
|
||||
One alternative approach which was briefly discussed in person with
|
||||
link:https://github.com/carlossg[Carlos Sanchez] was to drop these
|
||||
"incremental build" artifacts directly into an Azure storage container.
|
||||
|
||||
This approach was rejected as it would require additional non-native tooling to
|
||||
be used in the development workflow. By adopting a Maven repository, existing
|
||||
tools for grabbing Maven dependencies can be utilized by developers wishing to
|
||||
incorporate "incremental builds" into their build and test workflows.
|
||||
|
||||
|
||||
==== Existing Maven Repository
|
||||
|
||||
Re-using the existing `releases` Maven repository was explicitly _not_
|
||||
considered as an alternative approach as the Jenkins infrastructure team has
|
||||
had multiple performance issues
|
||||
footnote:[http://lists.jenkins-ci.org/pipermail/jenkins-infra/2017-December/001349.html]
|
||||
with that repository over the past couple of months. Most notably, the indexing
|
||||
times in the repository have varied between 10 minutes and over 60 minutes due
|
||||
to opaque server-side issues. The consequence of adding more load, and many
|
||||
more artifacts, to the repository would severely affect the indexing time and
|
||||
adversely affect the ability for Jenkins users to receive new plugin updates in
|
||||
the Update Center footnote:[https://updates.jenkins.io].
|
||||
|
||||
|
||||
[[costs]]
|
||||
== Costs
|
||||
|
||||
As Artifactory is a hosted service provided by link:https://jfrog.com[JFrog],
|
||||
it is not expected that any additional financial cost will be involved in this
|
||||
proposal.
|
||||
|
||||
Additionally, since this document proposes an additional repository, it is not
|
||||
expected to incur any substantial runtime/performance cost on the existing
|
||||
Update Center and `releases` repository indexing process.
|
||||
|
||||
|
||||
== Reference implementation
|
||||
|
||||
Since we have no staging implementation of Artifactory, there is no reference
|
||||
implementation, acceptance of this IEP document would result in a new
|
||||
repository being created on
|
||||
link:https://repo.jenkins-ci.org[repo.jenkins-ci.org].
|
Loading…
Reference in New Issue