Hi,

I'm wondering what techniques people have used to safely extract features from 
existing plugins into new plugins.

At first glance a phased approach intuitively makes sense:

1. Plugin A exists.
2. Extract feature from A into new plugin B. Release B.
3. Delete feature code from A. Make A depend on B (to transitively inherit the 
feature). Release A.
4. Wait a while for adoption of new A version.
5. Remove the B dependency from A. Release A.

However there is a problem that some 3rd party Jenkins management tools (i.e. 
not Jenkins' own tools like Plugin Installation Manager CLI) do not download 
transitive plugin dependencies when they install a plugin.

One such example is the Puppet Jenkins module: 
https://forge.puppet.com/modules/puppet/jenkins#plugin-dependencies

These tools usually offer plugin version pinning which mitigates the worst 
effects. However it would seem that as soon as step 3 happens and the Jenkins 
admin updates A, the extracted feature effectively disappears on their 
installation, unless they have somehow learned that they should also install B. 
So for this group of users there is no phased migration.

(Yes, Jenkins admins using these tools *should* run a non-production copy of 
Jenkins to test their changes before deploying, and yes they *should* read 
release notes before incrementing any plugin version... but this doesn't always 
happen.)

Do we consider these use cases when extracting features? If so do we employ any 
techniques to help e.g. major version increments?

Chris

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/e6a5d416-2e75-447a-bdf0-d807ce4b8096%40www.fastmail.com.

Reply via email to