Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to Git merge / push using Jenkins pipeline

I am trying to create a Jenkins workflow using a Jenkinsfile. All I want it to do is monitor the 'develop' branch for changes. When a change occurs, I want it to git tag and merge to master. I am using the GitSCM Step but the only thing that it appears to support is git clone. I don't want to have to shell out to do the tag / merge but I see no way around it. Does anyone know if this is possible? I am using BitBucket (on-prem) for my Git server.

like image 555
Progger Avatar asked Aug 04 '16 14:08

Progger


People also ask

How do I create a merge in Jenkins?

Just set Checkout/merge to local branch to production under the Advanced settings for Git in the Job configuration. Then set the Branches to build to master, or just leave it blank to have Jenkins try and merge and build each other branch it finds to production. It will do one merge/build for each branch.

Does git merge do a push?

That is your signal that you must run git fetch and then incorporate their commit(s) into what you will eventually push: you can do this with git merge (in which case, fetch+merge = git pull ) or with git rebase or however you see fit.

How do I push changes in Jenkins?

In Jenkins execute shell under Build, creating a file and trying to push that file from Jenkins workspace to GitHub. Download Git Publisher Plugin and Configure as shown below snapshot. Click on Save and Build. Now you can check your git repository whether the file was pushed successfully or not.


2 Answers

It is not possible at the moment because GitPublisher plugin, the plugin previously responsible for tagging/merging/pushing in freestyle jobs, has not been updated to be compatible with Jenkins pipelines. You can follow that issue on both the pipeline plugins compatibility page and the dedicated GitPublisher Jira issue.

So it seems the only option you have is to actually shell out your tag/merge commands... However, note that you can still benefit from some Jenkins built-in capabilities such as the use of credentials for your Git repo, which make it pretty straightforward to then tag / merge following your needs.

Example check-out :

git url: "ssh://jenkins@your-git-repo:12345/your-git-project.git",     credentialsId: 'jenkins_ssh_key',     branch: develop 

Then the tag / merge / push will be pretty straightforward :

sh 'git tag -a tagName -m "Your tag comment"' sh 'git merge develop' sh 'git commit -am "Merged develop branch to master' sh "git push origin master" 

I hope that one day GitPublisher will be released in a pipeline-compatible version, but for now this workaround should do.

like image 171
Pom12 Avatar answered Sep 22 '22 04:09

Pom12


If what you're after are the git credentials you can use the SSH Agent plugin like in this link: https://issues.jenkins-ci.org/browse/JENKINS-28335?focusedCommentId=260925&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-260925

sshagent(['git-credentials-id']) {   sh "git push origin master" } 
like image 39
andrzej.szmukala Avatar answered Sep 19 '22 04:09

andrzej.szmukala