Hi Gerrit and Jenkins Community,
after over two years of iterations and improvements of the Gerrit CI workflow 
(https://gerrit-ci.gerritforge.com), I have decided that is about time to 
extract the logic of our workflow and make it available as a brand-new Jenkins 
plugin!

Why?
I wanted to use the Gerrit CI validation workflow with potentially any project, 
including Gerrit plugins or anybody else wanting to adopt it.
I could just "copy & paste" our Groovy workflow, however, that does not seem a 
sensible and long-term approach.
I wanted to have "something more" than a pure triggering mechanism: I wanted to 
extend the power of Jenkisfile with the Gerrit review workflow verbs.

Why not?
Why should I write yet another Gerrit/Jenkins plugin? Isn't Gerrit Trigger 
Plugin (https://wiki.jenkins.io/display/JENKINS/Gerrit+Trigger) enough?
We couldn't use it against gerrit-review.googlesource.com because stream events 
are just not accessible.

There are unresolved issues about:
- Stability: stream-events are based on SSH, which isn't scalable, reliable 
against downtime, etc.
- Usability: at every JenkinsWorld conference people still come to me asking 
"how do I setup correct the Gerrit Trigger plugin"?
- Integration: using it inside a JenkinsFile isn't that straightforward and 
multi-branch projects aren't supported either

What would it be?
I will publish a new plugin named "Gerrit Pipeline Plugin."
The new name indicates:
- Deep integration with Jenkins Pipeline
- Out-of-the-box integration with Gerrit validation workflow in the pipeline

A simple example scripted Jenkinsfile would be:

node {
    checkout scm

    gerrit.withServer("http://gerrit:8080/";, "gerrit") {

        try {
            docker.image('gerritforge/play-sbt-8-jdk-alpine').inside {
                stage('Build') {
                    sh 'sbt compile'
                }
                stage('Test') {
                    sh 'sbt 'test'
                }
            }

            gerrit.review("Verified", 1, "It works !")
        } catch (e) {
            gerrit.review("Verified", -1, "Breaks the build ;-(")
            throw e
        }
    }
}

(Where:
- https://gerrit-review.example.com would be the Gerrit URL
- mycredentialsid would be the id of the credentials to access Gerrit)

One key-aspect will be: stateless, configuration-less (apart from the 
credentials stored in Jenkins keychain)
That means that multiple Jobs, multiple branches of the same Job, can have 
their own Gerrit integration defined and working out-of-the-box.

No more people asking "how do I configure the Gerrit integration"?
You'll just define a gerrit.withServer() { } and ... it will just work.

When?
I am planning to showcase the first prototype of the new plugin at the Jenkins 
World Conference in San Francisco inside my "Data-Driven Pipeline workshop."
(https://jenkinsworld20162017.sched.com/event/APTd/data-driven-pipeline-workshop-free
 
<https://jenkinsworld20162017.sched.com/event/APTd/data-driven-pipeline-workshop-free>)
Shortly afterward, I will publish the plugin on the GerritForge's GitHub 
account and will start the integration process into the Jenkins CI organization.

Next steps?
A second iteration of the plugin would have a Declarative pipeline equivalent 
as well, which would require even less code required.
A third iteration of the plugin would support BlueOcean as well, to have a 
fully UX-integrated experience.
The goal is to have Gerrit Code Review to be a 1st class citizen in the Jenkins 
ecosystem :-)

So what happens to the Gerrit Trigger Plugin?
The new plugin is not going to replace the current Gerrit Trigger Plugin, but 
would rather represent an alternative to simpler scenarios when you just 
require a standard Jenkinsfile Gerrit validation workflow. For all the current 
users of the Gerrit Trigger Plugin things wouldn't change, unless they need a 
more Jenkisfile-integrated experience.

Feedback? Like it? Hate it? Have your say :-)

Luca.


-- 
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 jenkinsci-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/D9530F31-F753-4339-AAF5-62449FFCC607%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to