Hi devs,
I've been working on Jenkins Job generation (see
http://jira.xwiki.org/jira/browse/XCOMMONS-87).
The idea is to have a maven project that you run and which generates Jenkins Job
automatically and sets them on
ci.xwiki.org
The pros are:
* Easy to create new jobs whenever we create a new branch
* Allows to manager our Jenkins configuration by storing it in our SCM
Proposal 1
=========
xwiki-commons/xwiki-commons-tools/
|_ xwiki-commons-tool-jenkins/
|_ xwiki-commons-tool-jenkins-base/
|_ xwiki-commons-tool-jenkins-commons/ <-- parent =
xwiki-commons-tool-jenkins-base
xwiki-rendering/xwiki-rendering-tools/
|_ xwiki-rendering-tool-jenkins/ <-- parent = xwiki-commons-tool-jenkins-base
xwiki-platform/xwiki-platform-tools/
|_ xwiki-platform-tool-jenkins/ <-- parent = xwiki-commons-tool-jenkins-base
xwiki-enterprise/xwiki-enterprise-tools/
|_ xwiki-enterprise-tool-jenkins/ <-- parent = xwiki-commons-tool-jenkins-base
xwiki-manager/xwiki-manager-tools/
|_ xwiki-manager-tool-jenkins/ <-- parent = xwiki-commons-tool-jenkins-base
To run them, you go in each of the top level project's tool directory and run
"mvn deploy". It creates and deploys the Jenkins Job, updating the jobs if they
already exist.
Proposal 2
=========
Create a new Git repository called xwiki-jenkins in
https://github.com/organizations/xwiki
Have a single pom.xml in there which generates all Jenkins jobs (it's possible to have
various profiles if we want to generate jobs only for a subset of modules).
You run it using "mvn deploy" too.
Proposal 3
=========
Extends Proposal 2 but merges with the repo currently named
"xwiki-debug-eclipse" . That repo would be renamed to "xwiki-tooling"
or "xwiki-development-tools" or simply "xwiki-tools" and would have 2
directories at the top:
xwiki-debug-eclipse/
xwiki-jenkins/
Note that both xwiki-debug-eclipse and xwiki-jenkins should follow the same version and be
in sync with the other top level repositories since they're tools for a given version
of commons/rendering/platform/xe/manager.
If they're together it means they'll share the same JIRA project and will use 2
components to differentiate them, which is perfectly fine.
Conclusion
=========
I think I'm tempted a bit more by Proposal 2 and 3 because:
* It allows to generate all jobs in one go
* Jenkins is not really related to the rest of the build and thus it's not completely
"normal" that its config should be mixed with building the runtime. For example
when we deploy XWiki Commons to Maven Central it means users will see the Jenkins config
there too with stuff that are only valid for
xwiki.org.
* It makes simpler for maintenance to have it all in one POM together.
I'm undecided between Proposal 2 and 3.
WDYT?
Thanks
-Vincent