Friday, August 09, 2013

How we cook GitHub, Jira and Jenkins with Domino

Why would I use it?

I'll describe briefly how we use GitHub, Jira and Jenkins together to make better development process. More details will come later when I get some desire :). OK, lets look what benefits we have from using these tools.

GitHub with Jenkins

GitHub has number of Service Hooks and one of them is for Jenkins. It allows to trigger build jobs when pushes are made to GitHub. You don't need to have any skill to do that, let's look on screen below. So once you made a push, Jenkins start to work.

GitHub with JIRA

It's possible to made connection between JIRA and GitHub, so once you made push to GitHub JIRA will update related ticket, you only need to specify ticket number in comments. As a result you will have history with commits directly in JIRA ticket. Let's look on ticket I've closed few days ago.
You can see what exactly have been done in order to fix the ticket. Also you can get more details if you wish, you only need to click on any of those updated files and then you will see that

Jenkins and Domino

That is most complicated part. In order to synchronize changes from GitHub to Domino application we use Jenkins (if you remember once push happens we trigger hook on Jenkins). Unfortunately there are no plugins that could do that, instead you have to write your own. That's it why we have ~60 seconds delay (I mentioned it in previous posts) after push.


For me JIRA and GitHub is de facto standard our days. Jenkins in our case is necessary to use in order to push changes from GitHub to Domino. It's a bit complicated process so you need before, if it is really what you need.

Other articles in this series

  1. How we build our web applications based on Domino
  2. Split back-end and front-end areas, they should not block each other and be independent as much as it is possible.
  3. Front-end guys should not have any knowledge about Domino, they don't need IBM Designer installed at all.
  4. Back-end guys must have knowledge about Domino, however they don't need to use IBM Designer, only in very rare cases. Backend should be done using only Java (no LS/SSJS/@Formula etc)
  5. Using Git+Jira is must and Jenkins server as builder server
  6. Auto-tests.


Martin Pradny said...

I really wonder what in your case means to push changes from GitHub to Domino. Are you uploading those files into a nsf, or just putting them somewhere reachable by Domino HTTP task?

Dmytro Pastovenskyi said...

so far we push (upload) files into Doimno, so as I mentioned our FE guys should not have any knowledge with IBM Designer etc.

Andriy Kuba said...

@Martin Pradny
>I really wonder what in your case means to push changes from GitHub to Domino. Are you uploading those files into a nsf, or just putting them somewhere reachable by Domino HTTP task?

Jenkins synchronize remote and local git repositories, then run our own builder. Our builder take files from local git (only ones that was changed from last sync), then export design DXL from .nsf (depend from changes). After this it compare put chnages in to DXL file and import it back to .nsf.

In this process we have "hooks" for special task, like minimize javascript and css, merge few javascript in to one and so on.

There is also ability to upload different files in to different databases.

We have Javascript, CSS and resources in one database and templates in another. So, in Domino we have two different databases but in version control system we have one solid repository.

In general - it looks like we cut only web UI aspect from our application (that consist from few .nsf) and put it in to the clear box.

Martin Pradny said...

Thanks for explanation. So DXL does that magic :)

Maybe one day we will be able to do such thing for non-static resources too. I've seen post on OpenNTF with an idea of a build server for Domino.