I would like this project to be able to handle building merge requests and regular pushes. In order to do this I need a way to configure the git plugin via code to merge two branches together before a build. Much like the RevisionParameterAction.java in the git plugin, we need a class that takes to branches, a source and a target, and can be passed as a build action. I have started an issue for the Git plugin here: https://issues.jenkins-ci.org/browse/JENKINS-23362 If you know of a way to do this please PM on twitter at @bass_rock. All the other necessary code exists in this repo and works.
Using it With A Job
=====================
* Create a new job by going to ``New Job``
* Set the ``Project Name``
* Feel free to specify the ``GitHub Project`` url as the url for the Gitlab project (if you have the GitHub plugin installed)
* In the ``Source Code Management`` section:
* Click ``Git`` and enter your Repositroy URL and in Advanced set its Name to ``origin``
* In ``Branch Specifier`` enter ``origin/${sourceBranch}``
* In the ``Additional Behaviours`` section:
* Click the ``Add`` drop down button and the ``Merge before build`` item
* Specify the name of the repository as ``origin`` (if origin corresponds to Gitlab) and enter the ``Branch to merge to`` as ``${targetBranch}``
* In the ``Build Triggers`` section:
* Check the ``Build when a change is pushed to GitLab.``
* In GitLab go to the project ``Settings``
* Click on ``Services``
* Click on ``GitLab CI``
* For ``token`` put any random string (This is not yet functioning)
* For ``Project URL`` put ``http://JENKINS_URL/project/PROJECT_NAME``
* Click on ``Web Hooks``
* Add a ``Web Hook`` for ``Merge Request Events`` to ``http://JENKINS_URL/project/PROJECT_NAME`` (GitLab for some reason does not send a merge request event with the GitLab Service)
* Configure any other pre build, build or post build actions as necessary
* ``Save`` to preserve your changes
You can trigger a job a manually by clicking ``This build is parameterized`` and adding the relevant build parameters.
These include:
* sourceBranch
* targetBranch
* branch (This is optional and can be used in shell scripts for the branch being built by the push request)
* GitLab CI Merge Status pages says pending when there is no build scheduled, or the status is unknown. This is because I coded a workaround until this bug gets resolved: https://github.com/gitlabhq/gitlabhq/issues/7047