How to use Jenkins pre-build branch merging only for branches I want to merge?

I am reading https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-AdvancedFeatures which allows pre-builds of feature branches before pushing commits to the master branch, effectively implementing a pre-commit build/test queue.

It says under Using Git, Jenkins and pre-build branch merging:

Set up your Jenkins project, and leave the ‘branch’ field in the Git
SCM blank. This will cause Jenkins to consider any change on any
branch for building.

Next, pick a particular branch name as the integration target in the
‘Advanced’ section – (e.g. ‘master’, or ‘stable’), and select ‘Merge
before build’.

Select ‘Push GIT tags back to origin repository’ from the post-build
actions (this is required to update your centralised git repo with the
results of the build).

Now, developers should never commit directly to your integration
branch (the ‘master’ or ‘stable’). Instead, they should either use
feature branches, or create new remote branches on commit (e.g : “git
push origin HEAD:refs/heads/myNewFeature”). You could also set up your
GIT repository to only accept commits onto the integration branch from
Jenkins.

You’re done. Commits should now be automatically merged with the
integration branch (they will fail if they do not merge cleanly), and
built. If the build succeeds, the result of the merge will be pushed
back to the remote git repository.

Now I often have feature branches that I would like to continue developing on, and only merge them into master later.

As far as I understand, this setup will merge and push any feature branch into master as soon as it builds.

(How) Can Jenkins support my use case, building all feature branches, but merging only those into master that I indend to be merged?

  • Jenkins - HTML Publisher Plugin - No CSS is displayed when report is viewed in Jenkins Server
  • Jenkins : Sending success email only once a day (though the job is running @hourly)
  • Tagging Jenkins builds with git
  • Jenkins Pipeline Job with file parameter
  • Skip tests in Jenkins
  • How to change port for jenkins window service when 8080 is being used
  • Reconfigure and reboot a Hudson/Jenkins slave as part of a build
  • Jenkins triggers jobs without git changes
  • 2 Solutions collect form web for “How to use Jenkins pre-build branch merging only for branches I want to merge?”

    I have a build pipeline where I only want the develop branch to merge back to my stable branch. All others should not be merged. The way I’ve solved this is to have a separate job for the merge. When the build job is complete, the ‘merge’ job is only triggered if the environment variable GIT_BRANCH equals ‘develop’.

    Jenkins doesn’t have a very good conditional trigger that works the way I want. Here is how I set up my build job to conditionally trigger the merge step.

    • Add a build step to remove a file called trigger.properties (I use the Execute Shell build step)
    • Add a build step (conditional-buildstep plugin) Conditional step (single) to run if $GIT_BRANCH equals “origin/develop”. When true, it runs a shell command to create the trigger.properties file. (touch trigger.properties)
    • Add a post-build action (Parameterized Trigger plugin) to trigger my merge job when the build is stable. In the Parameters from properties file section, fill in the field with “trigger.properties”. There is an option “Don’t trigger if any files are missing”, so check that.

    So the process is that the trigger.properties file is first removed to make sure a previous run didn’t conflict. Then, check to see if the git branch is develop. If it is, recreate the trigger.properties file. The post-build step requires that file to exist for the next job to get triggered.

    Now you can perform the kinds of merging you like in a job made just for that. You can also modify this process so that more than one branch makes it to the merge job.

    Have you had a look at the pretested commit plugin for Jenkins?
    https://wiki.jenkins-ci.org/display/JENKINS/Pretested+Integration+Plugin

    It was designed for exactly the purpose you described.

    Git Baby is a git and github fan, let's start git clone.